Class: Dewasm::Pozeiden::WasmModule

Inherits:
Object
  • Object
show all
Includes:
Rt
Defined in:
lib/dewasm/pozeiden/wasm_module.rb

Defined Under Namespace

Modules: Rt

Constant Summary collapse

GLOBAL_EXPORTS =
{  }.freeze
TABLE_EXPORTS =
{  }.freeze
MEMORY_EXPORTS =
["memory"].freeze

Constants included from Rt

Rt::F32_MAX, Rt::F32_OVERFLOW, Rt::M32, Rt::M64

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Rt

check_import_kind, cvt_f32_i, cvt_f64_i, f32, f32_abs, f32_bits, f32_demote, f32_from_bits, f32_neg, f32_reinterpret_i32, f64_abs, f64_bits, f64_copysign, f64_from_bits, f64_neg, f64_promote, f64_reinterpret_i64, ffloor, fsqrt, i32_clz, i32_div_s, i32_div_u, i32_extend16_s, i32_extend8_s, i32_reinterpret_f32, i32_rem_u, i32_rotl, i32_trunc_sat_s, i32_trunc_sat_u, i64_clz, i64_ctz, i64_div_u, i64_extend_i32_s, i64_reinterpret_f64, i64_rem_u, i64_rotl, m64, quiet_nan, resolve_import, s32, s64, sext, trap, trunc_sat

Constructor Details

#initialize(imports = {}, args: [], env: {}, preopens: {}) ⇒ WasmModule

Returns a new instance of WasmModule.



974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 974

def initialize(imports = {}, args: [], env: {}, preopens: {})
	@m = Rt::Memory.new(514, nil)
	@t0 = Rt::Table.new(129, 129)
	@wasi = nil
	@if0 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "random_get"), :func, "wasi_snapshot_preview1", "random_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_random_get)
	@if1 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "clock_time_get"), :func, "wasi_snapshot_preview1", "clock_time_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_clock_time_get)
	@if2 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "clock_res_get"), :func, "wasi_snapshot_preview1", "clock_res_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_clock_res_get)
	@if3 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "environ_sizes_get"), :func, "wasi_snapshot_preview1", "environ_sizes_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_environ_sizes_get)
	@if4 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "environ_get"), :func, "wasi_snapshot_preview1", "environ_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_environ_get)
	@if5 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_pwrite"), :func, "wasi_snapshot_preview1", "fd_pwrite") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_pwrite)
	@if6 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_filestat_set_size"), :func, "wasi_snapshot_preview1", "fd_filestat_set_size") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_filestat_set_size)
	@if7 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_fdstat_get"), :func, "wasi_snapshot_preview1", "fd_fdstat_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_fdstat_get)
	@if8 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_seek"), :func, "wasi_snapshot_preview1", "fd_seek") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_seek)
	@if9 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_write"), :func, "wasi_snapshot_preview1", "fd_write") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_write)
	@if10 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_close"), :func, "wasi_snapshot_preview1", "fd_close") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_close)
	@if11 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_filestat_get"), :func, "wasi_snapshot_preview1", "fd_filestat_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_filestat_get)
	@if12 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "path_remove_directory"), :func, "wasi_snapshot_preview1", "path_remove_directory") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_path_remove_directory)
	@if13 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "path_unlink_file"), :func, "wasi_snapshot_preview1", "path_unlink_file") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_path_unlink_file)
	@if14 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_readdir"), :func, "wasi_snapshot_preview1", "fd_readdir") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_readdir)
	@if15 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "path_filestat_get"), :func, "wasi_snapshot_preview1", "path_filestat_get") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_path_filestat_get)
	@if16 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "path_create_directory"), :func, "wasi_snapshot_preview1", "path_create_directory") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_path_create_directory)
	@if17 = check_import_kind(resolve_import(imports, "wasi_snapshot_preview1", "fd_read"), :func, "wasi_snapshot_preview1", "fd_read") || (@wasi ||= Rt::WASI.new(args: args, env: env, preopens: preopens)).method(:wasi_fd_read)
	@g0 = 16777216
	@elem0 = [[:"i32,i32,i32,i32,i32->", method(:_f331)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32->i32", method(:_f330)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32->", method(:_f482)], [:"i32,i32,i32,i32,i32,i32,i32,i32->i32", method(:_f465)], [:"i32,i32,i32,i32,i32,i32,i32,i32->", method(:_f485)], [:"i32,i32,i32,i32,i32->", method(:_f484)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f483)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32->", method(:_f444)], [:"i32->", method(:_f482)], [:"i32,i32->i32", method(:_f439)], [:"i32->i32", method(:_f330)], [:"i32,i32,i32,i32->i32", method(:_f481)], [:"i32,i32,i32->", method(:_f444)], [:"i32,i32,i32->", method(:_f480)], [:"i32,i32,i32->", method(:_f479)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32->", method(:_f443)], [:"i32,i32,i32,i32->i32", method(:_f478)], [:"i32,i32,i32,i32,i32->", method(:_f477)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32->", method(:_f476)], [:"i32,i32,i32,i32,i32,i32->", method(:_f475)], [:"i32,i32,i32,i32,i32->i32", method(:_f466)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32->", method(:_f473)], [:"i32,i32,i32,i32,i32->", method(:_f472)], [:"i32,i32,i32,i32,i32->", method(:_f471)], [:"i32,i32,i32,i32,i32,i32,i32->", method(:_f433)], [:"i32,i32,i32,i32->i32", method(:_f469)], [:"i32,i32,i32,i32->i32", method(:_f470)], [:"i32,i32,i32,i32,i32,i32,i32->i32", method(:_f467)], [:"i32,i32,i32,i32,i32,i32,i32->i32", method(:_f467)], [:"i32,i32,i32,i32,i32,i32,i32->i32", method(:_f467)], [:"i32,i32,i32,i32,i32,i32,i32->", method(:_f433)], [:"i32,i32,i32,i32->i32", method(:_f468)], [:"i32,i32,i32,i32,i32,i32,i32->i32", method(:_f467)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32,i32,i32,i32->i32", method(:_f466)], [:"i32,i32,i32,i32,i32->i32", method(:_f466)], [:"i32,i32,i32,i32,i32,i32,i32,i32->i32", method(:_f465)], [:"i32,i32,i32->", method(:_f463)], [:"i32,i32,i32->", method(:_f462)], [:"i32,i32,i32->", method(:_f461)], [:"i32,i32,i32,i32,i32,i32,i32,i32,i64->", method(:_f460)], [:"i32,i32,i32,i32,i32,i32,i32->", method(:_f433)], [:"i32,i32,i32,i32,i32,i32,i32,i64->", method(:_f459)], [:"i32,i32,i32,i32,i32,i64->", method(:_f458)], [:"i32,i32,i64->i32", method(:_f457)], [:"i32,i32,i64->i32", method(:_f456)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32,i32->", method(:_f455)], [:"i32,i32->i32", method(:_f448)], [:"i32,i32,i32->", method(:_f452)], [:"i32,i32,i64->i32", method(:_f451)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32->", method(:_f443)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f450)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32->", method(:_f443)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32,i32->", method(:_f449)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32,i32->", method(:_f428)], [:"i32,i32,i32->", method(:_f446)], [:"i32->", method(:_f427)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32->", method(:_f445)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32,i32->", method(:_f444)], [:"i32,i32->", method(:_f443)], [:"i32,i32->", method(:_f443)], [:"i32,i32,i32->", method(:_f440)], [:"i32,i32,i32->", method(:_f442)], [:"i32,i32->i32", method(:_f439)], [:"i32,i32,i32->", method(:_f436)], [:"i32,i32,i32->i32", method(:_f435)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32,i32->", method(:_f488)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32,i32->", method(:_f487)], [:"i32,i32,i32->", method(:_f434)], [:"i32,i32,i32,i32,i32,i32->", method(:_f474)], [:"i32,i32,i32,i32,i32->", method(:_f486)], [:"i32,i32,i32,i32,i32,i32,i32,i32->", method(:_f485)], [:"i32,i32,i32,i32,i32,i32,i32->", method(:_f433)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32->", method(:_f432)], [:"i32,i32,i32->", method(:_f431)], [:"i32,i32,i32,i32->i32", method(:_f429)], [:"i32,i32,i32,i32->i32", method(:_f523)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f522)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f227)], [:"i32,i32,i32,i32,i32->", method(:_f521)], [:"i32,i32,i32,i32->i32", method(:_f558)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f557)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f556)], [:"i32,i32,i32,i32,i32->", method(:_f555)], [:"i32,i32,i32,i32->i32", method(:_f481)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f562)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f562)], [:"i32,i32,i32,i32,i32->", method(:_f484)], [:"i32,i32,i32,i32,i32->", method(:_f560)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32->i32", method(:_f328)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32,i32,i32->", method(:_f563)], [:"i32,i32,i32,i32->", method(:_f329)], [:"i32,i32,i32->i32", method(:_f327)], [:"i32,i32,i32,i32->i32", method(:_f564)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f568)], [:"i32,i32,i32,i32,i32,i32->i32", method(:_f567)], [:"i32,i32,i32,i32,i32->", method(:_f566)]]
	@t0.init(1, @elem0, 0, 128)
	@elem0 = []
	@m.init(16777216, ["7e007d7d007c7c2d2d7c7c007b7b00407b00207b0020097b004469724e6f74456d70747900656e7469747900696e6974790050697065427573790046696c6542757379004465766963654275737900656e74727900686973746f72790064656570486973746f7279004f75744f664d656d6f727900626f756e6461727900456e74657270726973655f426f756e646172790064657374726f7900666f6e745f66616d696c7900666f6e742d66616d696c7900666f6e7446616d696c790050726f746f636f6c556e737570706f7274656442794164647265737346616d696c790073616e6b657900646570656e64656e63790073617475726461790073686f775f746f64617900546f6461790073756e64617900626f7800496e76616c6964526567657800795f6d6178002d2d3e7800726f77004f766572666c6f77004334436f6e74657874003c7465787400636f6d706f6e656e745f65787400636f6e7461696e65725f65787400706572736f6e5f6578740073797374656d5f657874006e6f64655f65787400636f6d706f6e656e745f64625f65787400636f6e7461696e65725f64625f6578740073797374656d5f64625f65787400616c7454657874006c6f6f705465787400626c6f636b5465787400496e7075744f757470757400556e6578706563746564456e644f66496e70757400496e76616c6964496e707574005570646174654c61796f757400436865636b6f75740054696d656f75740067616e747400666f7265737400696d706f7274006163746f725f7374617274006f7074537461727400616c74537461727400726563745374617274007061725374617274006c6f6f70537461727400637269746963616c537461727400627265616b5374617274006e65675374617274007879636861727400666c6f776368617274007175616472616e744368617274006f707400706f696e7400636f6d706f6e656e74004334436f6d706f6e656e740043344465706c6f796d656e7400667261676d656e7400726571756972656d656e7400656c656d656e7400557064617465456c656d656e74007175616472616e74007061727469636970616e7400706172616c6c656c6f6772616d5f616c740074726170657a6f69645f616c7400637269740025257b696e697400436f6d6d697400785f726967687400496e7465726e616c206572726f722c20656e636f756e7465726564202e726967687400666f6e745f77656967687400666f6e742d776569676874006d61785f68656967687400785f6c656674004e6f53706163654c656674007461726765740073747269637400726563740061786973466f726d61740064617465466f726d617400556e7265636f676e697a6564466f726d617400666c6f77730050617468416c7265616479457869737473004d617070696e67416c726561647945786973747300706f696e7473006576656e74730073746174656d656e747300726571756972656d656e747300656c656d656e7473007061727469636970616e747300466173744f70656e416c7265616479496e50726f677265737300636c617373006174747273006d656d626572730068747470730072656c6174696f6e73686970730072657475726e73007472616e736974696f6e730073656374696f6e730072656c6174696f6e73004e6f44696d656e73696f6e7300726567696f6e7300636f6c756d6e73006974656d7300636f6c7300785f6c6162656c73007369676e616c73007461736b73005461736b7300626c6f636b7300737562677261706873007461677300666c61677300626f7865730076616c756573006d61785f696e7075745f6279746573006e6f7465730073746174657300636c6173736573007468656d655661726961626c657300656e7469746965730073657269657300626f756e646172696573006564676573006578636c75646573006e6f6465730053797374656d5265736f7572636573006e616d6573706163657300636f6d706f756e6473006578636c756465735f7765656b656e647300616c696173006d767a7200617474720069735f6163746f72006572726f720053796e7461784572726f720050617273654572726f7200746578745f636f6c6f7200656467655f636f6c6f72007072696d617279436f6c6f72007072696d61727954657874436f6c6f72007072696d617279426f72646572436f6c6f72006c696e65436f6c6f72004e6f74446972004973446972006f76657200496e76616c696443686172616374657200636f6e7461696e6572004334436f6e7461696e657200746f6461794d61726b657200436f6e6e656374696f6e52657365744279506565720063796c696e646572006175746f6e756d62657200496e76616c69644e756d62657200616363446573637200706172006772616d6d617200556e657870656374656443686172006261720067726f7570006874747000795f746f70006c6f6f700053796d4c696e6b4c6f6f700072656c6174696f6e73686970004e657374696e67546f6f4465657000626c6f636b536570006d696e646d6170006d61696c746f002d2d6f00756e6b6e6f776e004e6574776f726b446f776e00427566666572556e64657272756e00706572736f6e00636f6d706f736974696f6e007472616e736974696f6e0073656374696f6e00646972656374696f6e0053656374696f6e007265616c697a6174696f6e006475726174696f6e00556e737570706f727465644f7065726174696f6e004c6f636b56696f6c6174696f6e0072656c6174696f6e006173736f63696174696f6e006167677265676174696f6e00657874656e73696f6e0068657861676f6e00636f6c756d6e006a6f696e00795f6d696e006d61696e006368696c6472656e00556e6578706563746564546f6b656e0068696464656e006e616e00626f6f6c65616e006b616e62616e005c6e007374616469756d00795f626f74746f6d0066726f6d0073797374656d0050726f746f636f6c556e737570706f72746564427953797374656d00526561644f6e6c7946696c6553797374656d006974656d00706172616c6c656c6f6772616d00726571756972656d656e744469616772616d00636c6173734469616772616d0065724469616772616d0073746174654469616772616d0073657175656e63654469616772616d004334204469616772616d00456e644f6653747265616d001b5b326d001b5b316d001b5b33316d001b5b306d001b5b33306d006e6f64655f66696c6c00426c6f636b656442794669726577616c6c00666f6e745f73697a655f736d616c6c00427566666572546f6f536d616c6c0072656c006c6162656c00426952656c0055706461746552656c007469636b496e74657276616c006e65757472616c006269646972656374696f6e616c007465726d696e616c0066696e616c007369676e616c006e6f726d616c00696e697469616c00637269746963616c007269736b007461736b00666f726b006461726b006c696e6b004e6f744c696e6b00626c6f636b00576f756c64426c6f636b00746869636b0052656c5f4261636b00627265616b00544f444f20696d706c656d656e742064697253657454696d657374616d7073207761736900496e76616c69644c656e677468006d61785f7769647468006769746772617068007375626772617068006769744772617068004c656e6774684d69736d61746368006272616e6368004272616e63680074656368004e6f74537667006d736700496e76616c696442617463685363726970744172670056616c7565546f6f4c6f6e67004e616d65546f6f4c6f6e67004e6f744f70656e466f7257726974696e6700456e7669726f6e6d656e745661726961626c654d697373696e6700737472696e6700426164537472696e6700536f636b65744e6f744c697374656e696e670053747265616d696e67004368657272795069636b696e6700436f6e6e656374696f6e50656e64696e67004e6f744f70656e466f7252656164696e670062616e67006d61696e426b670046696c65546f6f426967006e656700496e76616c6964456e756d54616700696e66005574663843616e6e6f74456e636f6465537572726f6761746548616c660045787065637465645365636f6e64537572726f6761746548616c6600747265627563686574206d732c2076657264616e612c20617269616c2c204c696265726174696f6e2053616e732c2044656a6156752053616e732c2073616e732d7365726966006f6666002366666666666600236563656366660023663066346666002366646630666600236638663066660068726566003031323334353637383961626364656600646f635265660053656374696f6e4f76657273697a65004d6573736167654f76657273697a6500666f6e745f73697a6500496e76616c69644578650061637469766500747275650076616c7565006e6f7465006465616374697661746500737461746500656c6c6970736500656c736500656e74657270726973650041646472657373496e557365004e616d655365727665724661696c7572650050726f746f636f6c4661696c7572650048617264776172654661696c757265007468726f772068657265007479706500556e737570706f7274656452657061727365506f696e745479706500556e6b6e6f776e4469616772616d54797065007369676e616c547970650042726f6b656e50697065007368617065006d696c6573746f6e65006e6f6e6500646f6e6500737562726f7574696e650074696d656c696e6500556e7265636f676e697a6564566f6c756d65007468656d65006e616d6500556e6b6e6f776e486f73744e616d6500426164506174684e616d6500496e76616c69644e616d65007374796c6500707a2d7469746c65006163635469746c6500544f444f20696d706c656d656e74206e6574577269746546696c65006d6964646c6500646f75626c655f636972636c65004e6f6e526573697a61626c6500456e74726f7079556e617661696c61626c6500436f6e63757272656e6379556e617661696c61626c650041646472657373556e617661696c61626c6500436c6f636b556e617661696c61626c6500556e7365656b61626c6500486f7374556e726561636861626c6500506f7274556e726561636861626c65004e6574776f726b556e726561636861626c65007363616c65006e6f64655f7374726f6b6500706965004d65726765004f7574707574546f6f4c6172676500496e707574546f6f4c6172676500436f6465706f696e74546f6f4c61726765004469616772616d546f6f4c617267650065646765006d657373616765006164644d6573736167650023656565656565006d6d6e6f6465007468656d655f6f766572726964650073657175656e636500416e74697669727573496e746572666572656e636500696e6865726974616e63650043726f7373446576696365004e6f446576696365004e6f745465726d696e616c4465766963650063686f696365006e616d657370616365002332326335356500233136323133650023316131613265002339323430306500636c6f756400496e76616c6964446e73436e616d655265636f726400496e76616c6964446e73415265636f726400496e76616c6964446e73414141415265636f7264007665726966794d6574686f64006261636b67726f756e6400636f6d706f756e640050726f636573734e6f74466f756e64004e6574776f726b4e6f74466f756e640046696c654e6f74466f756e6400496e746572666163654e6f74466f756e6400536f636b65744e6f74426f756e64006469616d6f6e64006b696e64006163746f725f656e64002e5b2a5d2d656e6400616e64006f7074456e6400616c74456e640072656374456e6400706172456e64006c6f6f70456e6400637269746963616c456e6400627265616b456e64006e6567456e6400556e6578706563746564456e6400626f6c6400556e6b6e6f776e4669656c64004d697373696e674669656c64004475706c69636174654669656c640074726170657a6f696400736f6c696400646f74746564004164647265737346616d696c79556e737570706f727465640046696c654c6f636b73556e737570706f72746564004f7074696f6e556e737570706f72746564004f7065726174696f6e556e737570706f7274656400536f636b65744d6f6465556e737570706f7274656400436f6e6e656374696f6e41626f7274656400756e696d706c656d656e74656400556e696d706c656d656e74656400556e657870656374656400536f636b6574556e636f6e6e656374656400436f6e6e656374696f6e5265667573656400436c6f73656400496e7465726e616c206572726f722c202e756e75736564206f72202e626567696e20656e636f756e7465726564004e6f4164647265737352657475726e656400756e6e616d656400446574656374696e674e6574776f726b436f6e66696775726174696f6e4661696c65640057726974654661696c6564005265736f6c76436f6e6650617273654661696c6564005265676578436f6d70696c654661696c656400526561644661696c65640043616e63656c65640043757272656e74446972556e6c696e6b65640041636365737344656e696564005065726d697373696f6e44656e696564006c696e6b5f646173686564005265736f757263654c696d69745265616368656400726f756e646564004c6f636b65644d656d6f72794c696d69744578636565646564004c696e6b51756f746145786365656465640050726f63657373466451756f746145786365656465640053797374656d466451756f746145786365656465640023646464646464002331313638626400496e76616c696455736572496400496e76616c696450726f6365737347726f7570496400316400707a2d64657363006173796d6d657472696300433444796e616d6963006974616c696300233734633066630050726f63657373416c726561647945786563002363636363636300233838383863630023363638386363002362653462646200636f6d706f6e656e745f646200636f6e7461696e65725f64620073797374656d5f646200233933373064620023303834323762002366663662366200236666643433620023663539653062004469736b51756f74610073616e6b65792d6265746100787963686172742d6265746100626c6f636b2d626574610073686f774461746100436f7272757074656444617461002366616661666100236638663966610023636564346461002361616161616100233636363661610023343436366161005b436f6d706f6e656e745d005b436f6e7461696e65725d005b506572736f6e5d005b536f6674776172652053797374656d5d005b44617461626173655d005b4e6f64655d005d5d005c5d005b485d005b436f6e7461696e65723a2044425d002f5d002e5b2a5d005b482a5d00225d005e242e7c3f2a2b28295b5d7b7d5c003a205b00504f494e5400484947484c494748540042540043524f5353004e4f5f434f4c4f52004c52004f50454e00524c00454f4c004e4f524d414c0020504b00464b004800454f46002e654500434c49434f4c4f525f464f524345005442003f002e2e7c3e002d2d7c3e003c2f747370616e3e003c2f7469746c653e003c2f646573633e002d2d3e3e003d3d3e002e2e3e002d2e2d3e002d2d2d3e0022207461726765743d225f626c616e6b222072656c3d226e6f6f70656e6572206e6f7265666572726572223e003c7469746c652069643d22707a2d7469746c65223e003c646573632069643d22707a2d64657363223e003d3d003c3c002671756f743b00266c743b002667743b0026616d703b00262333393b007469746c653a006163635469746c653a003a3a3a00093a00233939393939390023656334383939002365353530333900496e76616c696457746638002366386666663800236363356465380023653865386538002362306330653800236338613064380023623038306438002338383838383800233638363836380023613835356637002366666664653700236665663363370023323063393937002332323862653600236666663465360023646565326536002339356135613600233132623838360023353163663636002336363636363600233832623336360023303532653536002338346363313600236439373730360023663566356635002366316633663500233433386464350023326536323935002335353535353500233435343534350032323733373336373534343332333230353934373837353937363536323500313233323539353136343430373833303934353935353832353838333235343335333438333836343338353035343835373834383434343935333536303832393136323539373635363235003532393339353539323033333933373731313931373730313536323932343737363232363238323131393735303937363536323500383037373933353636393436333136303838373431363130303530383439353733303939313835333633333839353531363339353536383834373635363235003134393031313631313933383437363536323500313838303739303936313331353636303031323734393937383435393535353539333038343530393836343839303833353334303033343431343030323733303034353436373631353132373536333437363536323500333436393434363935313935333631343138383832333834383936323738333831333437363536323500333831343639373236353632350032303637393531353331333832353639313837313738353231373330313734393037313333393134353330323737323532313937323635363235003438313438323438363039363830383936333236333939343438353634363233313832393633343532353431323035333834373034383830393938343639383839313633393730393437323635363235003838383137383431393730303132353233323333383930353333343437323635363235003331353534343336323038383430343732323136343639313432363131333131343439313836393238323537343034333630393230313930383131313537323236353632350035383230373636303931333436373430373232363536323500313335353235323731353630363838303534323530393331363030313038373432373133393238323232363536323500353034383730393739333431343437353535343633353036323831373830393833313836393930383532313138343639373734373233303532393738353135363235003933313332323537343631353437383531353632350031313735343934333530383232323837353037393638373336353337323232323435363737383138363635353536373732303837353231353038373531373036323738343137323539343534373237313732383531353632350032313638343034333434393731303038383638303134393035363031373339383833343232383531353632350031343231303835343731353230323030333731373432323438353335313536323500373730333731393737373534383934333431323232333931313737303333393730393237343135323430363539323836313535323738303935393735353138323236363233353335313536323500333330383732323435303231323131303639393438353633343736383237393835313431343236333234383434333630333531353632350036313033353135363235003139373231353232363330353235323935313335323933323134313332303639363535373431383330313630383737373235353735313139323536393733323636363031353632350033363337393738383037303931373132393531363630313536323500383437303332393437323534333030333339303638333232353030363739363431393632303531333931363031353632350032333834313835373931303135363235003132393234363937303731313431303537343139383635373630383133353933313639353836393635383134323332383236323332393130313536323500353535313131353132333132353738323730323131383135383334303435343130313536323500333030393236353533383130353035363032303339393936353533353238383934383933353231353738333832353333363534343035353036323430343336383037323734383138343230343130313536323500313532353837383930363235003832373138303631323535333032373637343837313430383639323036393936323835333536353831323131303930303837383930363235003139323539323939343433383732333538353330353539373739343235383439323733313835333831303136343832313533383831393532333939333837393535363635353838333738393036323500333535323731333637383830303530303932393335353632313333373839303632350032333238333036343336353338363936323839303632350031323632313737343438333533363138383838363538373635373034343532343537393637343737313330323936313734343336383037363332343436323839303632350035343231303130383632343237353232313730303337323634303034333439373038353537313238393036323500353936303436343437373533393036323500333233313137343236373738353236343335343936363434303230333339383239323339363734313435333535383230363535383232373533393036323500313338373737383738303738313434353637353532393533393538353131333532353339303632350037353233313633383435323632363430303530393939393133383338323232333732333338303339343539353633333431333630313337363536303130393230313831383730343630353130323533393036323500343933303338303635373633313332333738333832333330333533333031373431333933353435373534303231393433313339333737393831343234333331363635303339303632350039303934393437303137373239323832333739313530333930363235003231313735383233363831333537353038343736373038303632353136393931303439303531323834373930303339303632350033333838313331373839303137323031333536323733323930303032373138353637383438323035353636343036323500313435353139313532323833363638353138303636343036323500373838383630393035323231303131383035343131373238353635323832373836323239363733323036343335313039303233303034373730323738393330363634303632350031323033373036323135323432303232343038313539393836323134313135353739353734303836333133353330313334363137363232303234393631373437323239303939323733363831363430363235003232323034343630343932353033313330383038343732363333333631383136343036323500353136393837383832383435363432323936373934363330343332353433373236373833343738363332353639333133303439333136343036323500393533363734333136343036323500343730313937373430333238393135303033313837343934363134383838383938323731313237343636323232373038383335303038363033353030363832353131333636393033373831383930383639313430363235003836373336313733373938383430333534373230353936323234303639353935333336393134303632350033373235323930323938343631393134303632350032303139343833393137333635373930323231383534303235313237313233393332373437393633343038343733383739303938383932323131393134303632350035363834333431383836303830383031343836393638393934313430363235003330383134383739313130313935373733363438383935363437303831333538383337303936363039363236333731343436323131313233383339303230373239303634393431343036323500313332333438383938303038343834343237393739343235333930373331313934303536353730353239393337373434313430363235003234343134303632350033383531383539383838373734343731373036313131393535383835313639383534363337303736323033323936343330373736333930343739383737353931313333313137363735373831323500373130353432373335373630313030313835383731313234323637353738313235003330353137353738313235003136353433363132323531303630353533343937343238313733383431333939323537303731333136323432323138303137353738313235003235323433353438393637303732333737373733313735333134303839303439313539333439353432363035393233343838373336313532363438393235373831323500343635363631323837333037373339323537383132350035383737343731373534313131343337353339383433363832363836313131323238333839303933333237373833383630343337363037353433373538353331333932303836323937323733363335383634323537383132350031303834323032313732343835353034343334303037343532383030383639393431373131343235373831323500313139323039323839353530373831323500363436323334383533353537303532383730393933323838303430363739363538343739333438323930373131363431333131363435353037383132350032373735353537353631353632383931333531303539303739313730323237303530373831323500313530343633323736393035323532383031303139393938323736373634343437343436373630373839313931323636383237323032373533313230323138343033363337343039323130323035303738313235003432333531363437333632373135303136393533343136313235303333393832303938313032353639353830303738313235003138313839383934303335343538353634373538333030373831323500393836303736313331353236323634373536373634363630373036363033343832373837303931353038303433383836323738373535393632383438363633333330303738313235003131333638363833373732313631363032393733393337393838323831323500363136323937353832323033393135343732393737393132393431363237313736373431393332313932353237343238393234323232343736373830343134353831323938383238313235003236343639373739363031363936383835353935383835303738313436323338383131333134313035393837353438383238313235003137333437323334373539373638303730393434313139323434383133393139303637333832383132350039343033393534383036353738333030303633373439383932323937373737393635343232353439333234343534313736373030313732303730303133363530323237333338303735363337383137333832383132350037343530353830353936393233383238313235003430333839363738333437333135383034343337303830353032353432343738363534393539323638313639343737353831393737383434323338323831323500313033333937353736353639313238343539333538393236303836353038373435333536363935373236353133383632363039383633323831323500313930373334383633323831323500323430373431323433303438343034343831363331393937323432383233313135393134383137323632373036303236393233353234343034393932333439343435383139383534373336333238313235003434343038393230393835303036323631363136393435323636373233363332383132350031353737373231383130343432303233363130383233343537313330353635353732343539333436343132383730323138303436303039353430353537383631333238313235003239313033383330343536373333373033363133323831323500363737363236333537383033343430323731323534363538303030353433373133353639363431313133323831323500323938303233323233383736393533313235003136313535383731333338393236333231373734383332323031303136393931343631393833373037323637373931303332373931313337363935333132350036393338383933393033393037323238333737363437363937393235353637363236393533313235003337363135383139323236333133323030323534393939353639313931313131383631363930313937323937383136373036383030363838323830303534363030393039333532333032353531323639353331323500343534373437333530383836343634313138393537353139353331323500323436353139303332383831353636313839313931313635313736363530383730363936373732383737303130393731353639363838393930373132313635383332353139353331323500313035383739313138343036373837353432333833353430333132353834393535323435323536343233393530313935333132350031373736333536383339343030323530343634363737383130363638393435333132350039363239363439373231393336313739323635323739383839373132393234363336353932363930353038323431303736393430393736313939363933393737383332373934313839343533313235003736323933393435333132350034313335393033303632373635313338333734333537303433343630333439383134323637383239303630353534353034333934353331323500323731303530353433313231333736313038353031383633323030323137343835343237383536343435333132350031313634313533323138323639333438313434353331323500363331303838373234313736383039343434333239333832383532323236323238393833373338353635313438303837323138343033383136323233313434353331323500313030393734313935383638323839353131303932373031323536333536313936363337333938313730343233363933393534393434363130353935373033313235003138363236343531343932333039353730333132350034333336383038363839393432303137373336303239383131323033343739373636383435373033313235003233353039383837303136343435373530313539333734373330373434343434393133353536333733333131313335343431373530343330313735303334313235353638333435313839303934353433343537303331323500323834323137303934333034303430303734333438343439373037303331323500313534303734333935353530393738383638323434343738323335343036373934313835343833303438313331383537323331303535363139313935313033363435333234373037303331323500363631373434343930303432343232313339383937313236393533363535393730323832383532363439363838373230373033313235003132323037303331323500323538343933393431343232383231313438333937333135323136323731383633333931373339333136323834363536353234363538323033313235003437363833373135383230333132350031313130323233303234363235313536353430343233363331363638303930383230333132350036303138353331303736323130313132303430373939393331303730353737383937383730343331353637363530363733303838313130313234383038373336313435343936333638343038323033313235003136393430363538393435303836303036373831333636343530303133353932383339323431303237383332303331323500333934343330343532363130353035393032373035383634323832363431333933313134383336363033323137353534353131353032333835313339343635333332303331323500373237353935373631343138333432353930333332303331323500713400236630666666340023643565386434002330366236643400633400233538383261340023656634343434002366643765313400382c3400342c3400713300236233623362330023306233653733002333333333333300362c3300352c3300342c33006163746f72320071320023666135323532006163746f723100713100233634363666310023653033313331002338356262663000233333396166300023666666386630002366666630663000236530653065300023613064386230002365386338613000236538383038300023653862303730002330663334363000236630633034300023636330303030002d30002f2f003c7c2e2e003c2e2e007175616472616e742d002d2e2d003c7c2d2d006f2d2d003c2d2d002d2d2d002a2d2d002b00482a002d2d2a0028656d70747920706965206368617274290028666c6f61742900282e7c5c6e2900666c6f77636861727420286e6f206e6f6465732070617273656429005d29002d3e290072676261283230302c3230302c3230302c302e3229002d2900292929005f426f756e646172792800436f6d706f6e656e745f4578742800436f6e7461696e65725f4578742800506572736f6e5f457874280053797374656d5f45787428004e6f64655f4578742800436f6d706f6e656e7444625f4578742800436f6e7461696e657244625f457874280053797374656d44625f4578742800436f6d706f6e656e742800436f6e7461696e65722800506572736f6e280053797374656d28004465706c6f796d656e745f4e6f646528007267622800436f6d706f6e656e7444622800436f6e7461696e65724462280053797374656d446228007267626128002828002227007d252500230020097b22005b220020726f6c653d22696d672220617269612d6c6162656c6c656462793d22003c6120687265663d220066696c6c2d6f7061636974793d22302e343522007374726f6b652d6461736861727261793d22352c3522007374726f6b652d6461736861727261793d22362c3322007374726f6b652d6461736861727261793d22352c3322002009220064657374726f792000626f7820006f7074200064657369676e436f6e73747261696e742000726571756972656d656e74200066756e6374696f6e616c526571756972656d656e742000706879736963616c526571756972656d656e742000706572666f726d616e6365526571756972656d656e742000696e74657266616365526571756972656d656e742000656c656d656e742000637265617465207061727469636970616e742000616c742000726563742000636c6173732000636f6c756d6e732000792d617869732000782d6178697320002061732000637265617465206163746f722000666f722000726566206f7665722000706172200062617220006c6f6f70200073656374696f6e2000646972656374696f6e2000636c69636b2000627265616b2000677261706820003c73766720006e656720007269676874206f6620006c656674206f66200020687265662000636c61737344656620006e6f746520004e6f7465200064656163746976617465200073746174652000656c736520006c696e6520007374796c6520006c696e6b5374796c6520007469746c6520006e616d6573706163652000616e642000202d2d3e2000202d3e2000203a2000202d2d2000202d200020090a0d0020090d0061626f7274696e672064756520746f207265637572736976652070616e69630a003c2f747370616e3e3c2f746578743e0a0020203c6d61726b65722069643d226172726f7722206d61726b657257696474683d22313022206d61726b65724865696768743d22372220726566583d2231302220726566593d22332e3522206f7269656e743d226175746f223e0a202020203c706f6c79676f6e20706f696e74733d223020302c20313020332e352c20302037222066696c6c3d2223333333333333222f3e0a20203c2f6d61726b65723e0a20203c6d61726b65722069643d226172726f772d6f70656e22206d61726b657257696474683d22313022206d61726b65724865696768743d22372220726566583d2231302220726566593d22332e3522206f7269656e743d226175746f223e0a202020203c706f6c796c696e6520706f696e74733d223020302c20313020332e352c20302037222066696c6c3d226e6f6e6522207374726f6b653d222333333333333322207374726f6b652d77696474683d22312e35222f3e0a20203c2f6d61726b65723e0a003c2f7376673e0a003c2f613e0a006772616d6d6172205069654772616d6d61720a696d706f727420222e2e2f636f6d6d6f6e2f636f6d6d6f6e223b0a0a656e747279205069653a0a20204e45574c494e452a0a202022706965222073686f77446174613f3d2273686f7744617461223f0a2020280a202020205469746c65416e644163636573736962696c69746965730a202020207c2073656374696f6e732b3d50696553656374696f6e0a202020207c204e45574c494e450a2020292a0a3b0a0a50696553656374696f6e3a0a20206c6162656c3d535452494e4720223a222076616c75653d4e554d4245525f50494520454f4c0a3b0a0a7465726d696e616c20464c4f41545f5049452072657475726e73206e756d6265723a202f2d3f5b302d395d2b5c2e5b302d395d2b2f3b0a7465726d696e616c20494e545f5049452072657475726e73206e756d6265723a202f2d3f28307c5b312d395d5b302d395d2a292f3b0a7465726d696e616c204e554d4245525f5049452072657475726e73206e756d6265723a20464c4f41545f504945207c20494e545f5049453b0a006772616d6d61722047697447726170684772616d6d61720a696d706f727420222e2e2f636f6d6d6f6e2f636f6d6d6f6e223b0a0a656e7472792047697447726170683a0a20204e45574c494e452a0a2020226769744772617068222028223a22207c20446972656374696f6e3f20223a22293f0a2020280a202020204e45574c494e450a202020207c205469746c65416e644163636573736962696c69746965730a202020207c2073746174656d656e74732b3d53746174656d656e740a2020292a0a3b0a0a53746174656d656e743a0a20202020436f6d6d69740a20207c204272616e63680a20207c204d657267650a20207c20436865636b6f75740a20207c204368657272795069636b696e670a3b0a0a446972656374696f6e3a0a20206469723d28274c5227207c2027544227207c2027425427293b0a0a436f6d6d69743a0a202027636f6d6d6974270a2020280a2020202020202769643a272069643d535452494e470a202020207c20276d73673a273f206d6573736167653d535452494e470a202020207c20277461673a2720746167732b3d535452494e470a202020207c2027747970653a2720747970653d28274e4f524d414c27207c20275245564552534527207c2027484947484c4947485427290a2020292a20454f4c3b0a0a4272616e63683a0a2020276272616e636827206e616d653d285245464552454e4345207c20535452494e47290a202028276f726465723a27206f726465723d494e54293f0a2020454f4c3b0a0a4d657267653a0a2020276d6572676527206272616e63683d285245464552454e4345207c20535452494e47290a2020280a2020202020202769643a272069643d535452494e470a202020207c20277461673a2720746167732b3d535452494e470a202020207c2027747970653a2720747970653d28274e4f524d414c27207c20275245564552534527207c2027484947484c4947485427290a2020292a20454f4c3b0a0a436865636b6f75743a0a20202827636865636b6f757427207c20277377697463682729206272616e63683d285245464552454e4345207c20535452494e472920454f4c3b0a0a4368657272795069636b696e673a0a2020276368657272792d7069636b270a2020280a2020202020202769643a272069643d535452494e470a202020207c20277461673a2720746167732b3d535452494e470a202020207c2027706172656e743a2720706172656e743d535452494e470a2020292a20454f4c3b0a0a7465726d696e616c205245464552454e43452072657475726e7320737472696e673a202f5c77285b2d5c2e5c2f5c775d2a5b2d5c775d293f2f3b0a002f2f2042617365207465726d696e616c7320616e6420667261676d656e747320666f7220636f6d6d6f6e206c616e677561676520636f6e737472756374730a2f2f205465726d696e616c20507265636564656e63653a204c617a7920746f204772656564790a2f2f205768656e20696d706f727465642c20746865207465726d696e616c732061726520636f6e7369646572656420616674657220746865207465726d696e616c7320696e2074686520696d706f7274696e67206772616d6d61720a2f2f204e6f74653a2048656e63652c20746f206164642061207465726d696e616c206772656564696572207468616e2074686520636f6d6d6f6e207465726d696e616c732c20696d706f72742069742073657061726174656c792061667465722074686520636f6d6d6f6e20696d706f72740a0a454f4c2072657475726e7320737472696e673a204e45574c494e452b207c20454f463b0a0a667261676d656e74205469746c65416e644163636573736962696c69746965733a0a2020282861636344657363723d4143435f4445534352207c206163635469746c653d4143435f5449544c45207c207469746c653d5449544c452920454f4c292b0a3b0a0a7465726d696e616c20424f4f4c45414e2072657475726e7320626f6f6c65616e3a20277472756527207c202766616c7365273b0a0a7465726d696e616c204143435f44455343523a202f5b5c74205d2a61636344657363725b5c74205d2a3a5b5e5c6e5c725d2a2f3b0a7465726d696e616c204143435f5449544c453a202f5b5c74205d2a6163635469746c655b5c74205d2a3a5b5e5c6e5c725d2a2f3b0a7465726d696e616c205449544c453a202f5b5c74205d2a7469746c655b5c74205d5b5e5c6e5c725d2a2f3b0a0a7465726d696e616c20464c4f41542072657475726e73206e756d6265723a202f5b302d395d2b5c2e5b302d395d2b2f3b0a7465726d696e616c20494e542072657475726e73206e756d6265723a202f307c5b312d395d5b302d395d2a2f3b0a7465726d696e616c204e554d4245522072657475726e73206e756d6265723a20464c4f4154207c20494e543b0a0a7465726d696e616c20535452494e472072657475726e7320737472696e673a202f225b5e225d2a227c275b5e275d2a272f3b0a0a2f2f20416c7068616e756d6572696373207769746820756e64657273636f72657320616e64206461736865730a7465726d696e616c2049442072657475726e7320737472696e673a202f5c77285b2d5c775d2a5c77293f2f3b0a0a7465726d696e616c204e45574c494e453a202f5c723f5c6e2f3b0a0a68696464656e207465726d696e616c20574849544553504143453a202f5b5c74205d2b2f3b0a68696464656e207465726d696e616c2059414d4c3a202f2d2d2d5b5e5c6e5d2a5c6e5b5e2d5d2a2d2d2d2f3b0a68696464656e207465726d696e616c204449524543544956453a202f5b5c74205d2a25255c7b5b5e7d5d2a5c7d25252f3b0a68696464656e207465726d696e616c2053494e474c455f4c494e455f434f4d4d454e543a202f5b5c74205d2a25255b5e5c6e5c725d2a2f3b0a0020090d0a00792d617869730900782d617869730900626172090073656374696f6e0900677261706809006c696e6509007469746c6509007c6f7b7d3c2009"].pack("H*"), 0, 16089)
	@data0 = "".b
	@m.init(16793382, ["803f00004000000000000000000000000000000000000100000001000000010000000000000000000000040000000000000000000000000000000400000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000005000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000000000000800000000000000000000000400000000000000000000000000000000000000170000003c0f0001040000000000000000000000000000001a0f0001040000000000000000000000000000006c0a0001080000000000000000000000000000009702000109000000000000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000100300010b000000000000000000000000000000c32e00010100000000000000000000000000000000000000c009000106000000000000000000000000000000000000009200000107000000000000000000000000000000000000006302000109000000000000000000000000000000000000004702000108000000000000000000000000000000000000003e02000108000000000000000000000000000000000000005a02000108000000000000000000000000000000000000006d0200010d000000000000000000000000000000000000007b0200010a00000000000000000000000000000000000000860200010800000000000000000000000000000000000000ae0c00010800000000000000000000000000000000000000ac0c00010a00000000000000000000000000000000000000a70c000104000000000000000000000000000000000000005c0600010400000000000000000000000000000000000000750300010500000000000000000000000000000000000000a00300010400000000000000000000000000000000000000440c0001030000000000000000000000000000000000000032070001080000000000000000000000000000000000000050020001090000000000000000000000000000000000000013010001030000000000000000000000000000002a01000104000000972e000101000000ce15000104000000c32e000101000000cf15000103000000262f000101000000e115000103000000972e0001010000002b01000103000000a92e000101000000a02f000103000000262f000101000000ba2f000102000000262f000101000000e215000102000000a92e00010100000000000000270f00010a00000000000000000000000000000000000000f70800010f000000000000000000000000000000a70c000104000000000000000000000000000000422f0001040000006f0f00010b000000af150001040000006f0f00010b000000532f000103000000780700010b0000005c2f000103000000780700010b000000472f000103000000f60700010b0000004a07000103000000f60700010b000000302f000103000000e70000010a000000d715000103000000e70000010a0000002b2f000104000000a90700010b000000aa15000104000000a90700010b000000e115000103000000ea0700010b0000004b2f000103000000ea0700010b000000312f000102000000f21200010b000000542f000102000000f309000104000000e1070001080000000000000000000000000000007004000105000000000000000000000000000000a90f000109000000000000000000000000000000d30800010c000000000000000000000000000000b70c0001050000000000000000000000000000000400000000000000000000000400000000000000000000000400000000000000000000000400000000000000000000002e10000108000000000000000000000000000000840700010a000000000000000000000000000000ea0800010c000000000000000000000000000000d305000104000000000000000000000000000000000000009c0c000104000000000000000000000000000000000000002500000106000000000000000000000000000000e008000109000000000000000000000000000000cf13000107000000231700010700000046140001070000003e14000107000000a316000107000000f316000107000000622e000107000000cd2e0001070000008f07000107000000000000000000000000000000e4090001040000000000000000000000000000001e020001050000000000000000000000000000008e0d0001080000000000000000000000000000001b17000107000000fb16000107000000622e000107000000a32e0001070000000214000107000000cf13000107000000461400010700000023170001070000003e14000107000000a316000107000000cd2e000107000000f3160001070000006a050001060000000000000000000000000000008f02000107000000000000000000000000000000d93e000100000000d93e000100000000d93e000100000000d93e000100000000b302000105000000000000000000000000000000a10200010d0000000000000000000000000000000400000000000000000000003a0f0001060000000000000000000000000000003b070001070000000000000000000000000000003701000104000000000000000000000000000000e0000001060000000000000000000000000000007500000108000000000000000000000000000000f1020001070000000000000000000000000000004f2e000102000000000000000000000000000000000a000105000000000000000000000000000000791400010a000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000e50200010b00000000000000000000000000000001000000f10200010700000000000000000000000000000001000000160700010c000000000000000000000000000000c0080001120000000000000000000000000000001408000106000000000000000000000000000000ad08000104000000000000000000000000000000570800010600000000000000000000000000000000000000000000001a00000000000000000000001b00000000000000000000001800000000000000000000003c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222077696474683d220000000000000000000000000000000000000000000220000022206865696768743d22222076696577426f783d223020302020223e01000000020000000300000004000000d93e000100000000000000000000000003000000747970653a20000000000000000000000000000000000000000000000000000000000000030000007665726966793a207269736b3a20746578743a2069643a207265663a205f5f7370616365000000000100000002000000040000000900000013000000260000004c000000990000003301000066020000cc040000990900003313000066260000cc4c0000999900003333010066660200cccc0400999909003333130066662600cccc4c00999999003333330166666602cccccc04ffffff0f3c7265637420783d2200000001000000010000000000000000000000022000002220793d22222077696474683d22222072783d2234222066696c6c3d2222207374726f6b653d2222207374726f6b652d77696474683d22312e3522207374726f6b652d6461736861727261793d22352c33222f3e0a0000000000000000000000210000000100000000000000050000000000000019000000000000007d000000000000007102000000000000350c000000000000093d0000000000002d31010000000000e1f505000000000065cd1d0000000000f902950000000000dd0ee90200000000514a8d0e000000009573c24800000000e941cc6b010000008d49fd1a07000000c16ff28623000000c52ebca2b1000000d9e9ac2d780300003d9160e45811000031d6e275bc560000f52e6e4daeb10100c9ea268367780800ed95c28f055a2a00a1edccce1bc2d30025a4000a8bca2204000000000000000000000000000000000000004095596959555554551555555604051541105455404551554440455044505555450040004040044496655556554540455451411540559155555555405105010000544554544555050400100410140440000000014055551541540400004400010000000040410000445044455054005555545565510040004001000001000501001154515154555505000000005b5d0000ea2f00010b000000680100010a000000523000010700000071070001060000002e3000010d000000a90100010d00000092300001090000002414000109000000f62f00010b000000730100010a0000005a3000010700000077080001060000001d300001100000009801000110000000853000010c000000171400010c000000db2f00010e0000005a0100010d000000473000010a00000072060001090000000c300001100000008701000110000000783000010c0000000a1400010c000000cc2f00010e0000004c0100010d0000003c3000010a000000b90200010900000002300001090000007e010001080000006d300001050000003c0f00010400000062300001100000003c0f0001040000004d202c204320204c20205a20412031322c31322030203020312020412031302c31302030203020312020412031342c313420302030203120204120203020312030203c747370616e20783d22222064793d22312e32656d223e222064793d22000200000001000000000000000000000002200000656d223e3c7465787420783d22222066696c6c3d222220666f6e742d73697a653d222220746578742d616e63686f723d226d6964646c652220666f6e742d66616d696c793d2222207472616e73666f726d3d22726f746174652829223e0000000000000000000000000000000000000000000000010000000000000000000000022000000000000000000000000000000200000000000000d93e00010000000000000000322e00010100000001000000312e00010200000001000000302e00010300000001000000c222000103000000020000002f2e00010400000002000000331d00010500000002000000bf2500010500000003000000e01f00010600000003000000f929000107000000030000001b18000107000000040000005e2600010800000004000000bc2200010900000004000000cd2c00010a00000004000000cd1b00010a00000005000000372300010b00000005000000391d00010c00000005000000752a00010c00000006000000f81800010d000000060000007a2700010e000000060000002f2100010e00000007000000152d00010f000000070000006f1c000110000000070000005f24000111000000070000007d1e00011100000008000000912800011200000008000000631800011300000008000000e92600011300000009000000c121000114000000090000008c2b00011500000009000000881a0001150000000a000000c0230001160000000a000000f21d0001170000000a000000eb2a0001180000000a000000fc190001180000000b00000047280001190000000b000000182000011a0000000b000000192e00011a0000000c000000211c00011b0000000c0000005f2500011c0000000c000000961f00011c0000000d000000632900011d0000000d000000831700011e0000000d000000c52500011f0000000d000000182200011f0000000e000000272c0001200000000e000000251b0001210000000e00000015230001210000000f000000cf1d0001220000000f000000012a0001230000000f000000921900012300000010000000db2700012400000010000000cd2000012500000010000000252d00012600000010000000be1c00012600000011000000af2400012700000011000000ce1e00012800000011000000e42800012800000012000000ce1800012900000012000000672600012a00000012000000962100012a00000013000000a22b00012b00000013000000f81a00012c00000013000000312400012d000000130000004f1e00012d00000014000000bc2a00012e00000014000000151a00012f00000014000000612800012f00000015000000e71f000130000000150000009f2d000131000000150000003d1c000131000000160000002c2500013200000016000000b31f00013300000016000000cc2900013400000016000000ee1700013400000017000000312600013500000017000000852200013600000017000000962c00013600000018000000951b00013700000018000000432300013800000018000000461d00013800000019000000822a00013900000019000000061900013a000000190000003e2700013b00000019000000f32000013b0000001a000000d82c00013c0000001a000000801c00013d0000001a000000712400013d0000001b0000008f1e00013e0000001b000000a42800013f0000001b000000231800013f0000001c000000fd260001400000001c000000d6210001410000001c000000492b0001420000001c000000451a0001420000001d0000007c230001430000001d0000000a1e0001440000001d000000042b0001440000001e000000b6190001450000001e00000000280001460000001e00000033200001460000001f000000d12d0001470000001f000000d81b0001480000001f0000007c25000148000000200000004c1f00014900000020000000812900014a00000020000000a21700014b00000020000000e52500014b00000021000000382200014c00000021000000482c00014d00000021000000471b00014d00000022000000c62200014e000000220000007f1d00014f00000022000000252a00014f000000230000004119000150000000230000008927000151000000230000007a20000152000000230000004c2d00015200000024000000e51c00015300000024000000d72400015400000024000000f71e000154000000250000000d29000155000000250000007718000156000000250000009226000156000000260000003e2100015700000026000000ce2b000158000000260000009e1a00015900000026000000d72300015900000027000000000306090d1013171a1d2124272b2e3135383b00000000005ad63b92d653f4ee3f3ba10629aa3f11f865651b66b4589507c524a459cac74a76bf3ea27fe1aeba49f62d0df0bc795d536fce8adf995ae9dc7379102c2cd8f49405c1b62ba0d89169e84b8a9b1b0779f94671a436c84eb684e2de6c82e24897b7988d4d447ae2e3259b1608231b1bfd727f78b06a8c6d8ef7200ee5f5f030fe4f9f965c85ef08b235a9515e332dbdbd2347bcb3662b8bde8213e63580782cad76ac553020fb168b31ccaf2150cb3b4c93176b3ce8b9dcad3dbf1b2a24be4adf78dd854b62e853d90dafa234ad6d1dd76baa336f3d71d48768ade5408c647286069500cb8c8dc9a9c2181f51affd0e6848bac0fdeff03bd4f2de66251bbd12026d7498fe9576a584574b60f730b64b0188913e7e3bd4cea52d5e3835bda39e41ea35ce5d4a8942cfb9758682ac4c0652b2e1a07ace958981930994d1ebef43731f1a491942fbeba1f80bf9c5e6eb1410a6609b9f12fa66caf64e7777e0261ad4d038824797b800fdb422559598b020898263b18c5e73209eb035555d5f6eb45562bcdd2f3690a8c51d83aa34f78921eb7b2bd5bb43b412f7e423d50175ece9a52d3b6555aab06b9a6e362521c933b247f889beead49c06c10a846e69bbc09e99762c6e250a4448f10d25ca43ea7006c0cadb6457862acd9628575e6a92060438bc123eed277580bcf2ecf504370805c66b978de87192a0eb2e6833c6444a86f7a37e5831875b44931d21e0fb6aeeb37a4c9eaefd687215b86429d8ba05ea6059df451a3d03cf1ae6bd338e298724b96fab6b300662c1d08f56e0f879d4b6d3a59686bc87baf1c4b36c18779889a4488f3ca8ab29292eb6e087de94feabcd1a3325490bbad9dc718c140b1d7f8bc0f09f6f1b8e2810548eafd94de45eaef0ec074aa2b13214e971db50619df6d92ce8c96e05af9fac312789d25c223a081c31becac69ac717fe70ab06f4aa480a63bd6d7d7881b99d3d4dd608b1d5daccbb2c094eebf0938246f085a58ec50860f5bb252126ed3823586ca74ef2f60ab8f22aafaa6f28072c6e47d1e1aeb40d66aff51aca457984dba4cc824ded90c89f8dd9503c97976512ce7fa3a028b5ba07f10fe50c7dfdfe96c15fccc87262a949ed531e4fdcbcbefcb177ff7a0fbb139ce8e825b10936f73dcfaa9face9548c6191b1771d8c03750d8395c717246aefb9f59dd5256f44d2d0e37af91dad446b2873054b77c56a8362ceec9b32ec0a43f967e34ed5764524fb01e8c23fa7cd93f7419c228ad456ed7902a2f30f11c1787552436bd64456348c414598a9aa786b89130a830cd66b41ef9156be53d556c66b98cc238fcbc6116b36eceda88aecb786bebf2c393f1ceb02a2b394a9d6f33214d7f77b074fe3a5838ae0b953ccb03fd9ccf5dac9225c8f24ad58e868ff9c8f0f40b3d1be9599d9366c3791a11fc2b9090810232dfbff8f444785b58aa732280c0ad4abf9f9ffb31599e6e26c513f328f0cc9163bfc7f90ad1fd08de392677fd9a73dae4afb9ff4982744b19c7741dfcf11cd991dfac7317f3195dd83d511d74356404052fc1c7fef3e7d8a72256b66ea352848663be45eab8e1cadcfee0500654332da404a9d3656b263d8826a07403ed4be90684e22e2754f3e8791a204e8a644775a02e2aa5a53e30da936cb05a2d0151571839a5531285c51d3033e87ca445b5a0d9180d51e99d91284c28694fe0a7958e8b6e08a66ff8f17a572a839be4d976e62e3982d40ff735dce8f12c82d213d0afb8e7f1c887f68fa80990b9dbc3466e67c729f236a9f0239a1804ec4ebc1ff1f1c4e87ac44474387c92062b566b2ff27a322a9d7151914e9fba8ba62009ffff14bb5c9a6ad8fac719da9b43d60c33f776f227c1099b317cec4d3214d38b40f55cb2b9b547fa09d01f6486a6046a1532a7efbe0944f8402c1996d42fccb4474da2e39197a63254331c00853fbfe551191fa889f58bcee933df0ca27ba7eab553579b563b735757c2696de58342f8b55c14ba23c2583921bb0bb166f01fbedaab19ecb8bee2377229ceadccac179a9155e465f1775768a95a192c91e19ec89cdfa0b365d1214edfa49b77b661f67ec80f9ce84f41659a8791ce51a40e78027e1b782d258ae3709cc318f108890b0b8ecb2d107ef99850b3ffeb215aab4dce6a71f86c96a0067cecebddf9ad4e193e091a767bd42600041a1d68be0246d5c2cbbc8e06d5378409149ccae186e8873f7e9fa5848689690f55b7fda9e896a5075a439af2d015e7a79998f8803964252c906846d7881f5d8d77fb3aa833bd3a67b08e5c8d6e132cfcd5f60d5640a88909a4a1efb26cd7fa1e03b5c857f06559aa0eef25c6fc0dfc9d84ab3a61e48eac048aa2ff48bb057fc8e1d60d026da24f1da943bf157ceb65d79123c825808b7d6083dc576ed8124b51717cba26eca640c4b8c765468a26da2dddc7dcb09fd7dcf5d2f94a9020b090b15545dfe4c7c5d43353bf9d3e1a6e5268d54fa9eaf6d1a4a01c57bc49a109f70b0e9b8c61b09a19c41b69a35c0d4c68c1c2467f8624bc903d26301c3f844fcd79176409b1dcf5d4263dee0793656fb4d369410c2e442f512fc155998c42b7ae143b994f29d93b2177b5b6f3e5a5bec6ccaf39c97429ccfee2c9905a731722708bd3084bd5383832a78ffc650bd4e314aec3ce5ec2864243556bff8a436d15eae13460f9499be36e195771b878485f699981713b93f6e84597b55e228e52674c07edd57e7cf89e52fdaea1a334f9848386fea96902176ef5dc8d2f03f63be5a060ba5bcb4a9536b757a07ed0ffb6df1c74dceebe19428c6125949e8d3bde4f69cf060338d5cd9bbabd72d7164ec9d34c42c3980b0b3cfaa964d798dbd67c541f57747a0dca08355fca0d7f0ec601b49f9aa2ce4894472b59dc48616f439629bb7d5375dacd5ce22c575281c31c73a8225cb8574d78b826b369332637dbc6471f79ed3a886973103029cff5daeebbd4db5860853a8fcfd8302837ff5d9662da162a8ca67d27bfd24c363df72d060bca43da9de80836d1ef7599ecb474278eb0d8d531661a408e674f085bed95256665170e85b79cd8b1f926c272e9067f6df324671d96b80b653dba3d81cba00f397bf97cdcf86a0a428d2cc0ea4e880f07daffdc083a8c8cdb2068012cd22616c5d1b3db1a4d2fa815f082057806b79631a31c6eea6c39cb03b05743630e3cbfc60bd77aa90f4c39c8a061144fcdbbe3bb9ac15d5b4f1f4442d481555fb92eec5f38b2d051117994a1c4d2d15dd1b75b6f0ee7846d55cbf5d63a0785ad462d2e4ac2a17980a34ef347cc8167189fb860eac7a0e9f868095a04d3daee6355dd4125719d246a8e0ba09a1cc5960837489d7ac9f8658d298e94bc93f7038a4d12b06cc23547783ff91cfdd2746a306637b08bf2c2955647fb642d5b1174cc83b1acaee77736a3d1fe4934a9e1d5fbaca203ef52a886286938e9cee82727bb47e548db2352afb6738b243aa234f9a619ee9311fc3f4f981c6ded494ece200fa05647ef3f9383c113c8b04ddd38d40bc83de5e7038478b150bae45d448b150ab2496768c0619eeda8dd957099bdd24d6ad3bc917a4cfd4a8f887d6e5800ad7a54ce5bc1d8d030ad3f6a94c1f21cd4ccf9f5e2b657084cc8774d41f67690020c347763b3fc6d2dfd4c88473e04100f4d9ec2909cf77c7170afba590585200711068f4ccc255b99dcc79cfb4ee66408d148271bf99d593e21fac8130554048d84cf1c62f00cb38db2717a27c6a505a0ea0adb83bc0fd06d2f19cca1c85e4f01108d9a64a30bd88462e44fd63a61d6d164a8f902e3e7615ec9c4a9efe8732044e8e599abacdd31a2744ddc5fd293f85e1f1ef4028c188e1309554f77cf48ee659ee2bd1b978f58c3edd949ace581930f874bb82e7d632308e143ac101af1f3c36526ae3a18c3fbcb19988f1c19a27cbc3e644dce5b7a7150f60f596b9c0f85e3a10ab29dea511db12b8b2bce7f0b6f648d41574560fd6911766dfeb21ad64345b491b1195c925bbce9f6b9334ecbe00d90db1cafb3bef69c28746b842a7ee404f515d3dfa0a6b04b32958e612512a11a3a5b40cdce6c2e20f1af78fab72baea85e7f04793a073db93e0f4b3560f69656721ed59b88850d2b818f2e02c53c33ec169683073557283734f978cfb133ac71842411ecfea4e645023bdaffa9808f99e92d1e583a5627d246cacdb39bf4ab746f745df72a75dce96c34b8983b78e328cba8b6b4f11f5817cb49eab6465323f2fa96e06a25572a29b6186d6bdfefe0e7b530ac88575874501fd1386365f5fe92c7406bde752e99641fc98a70437b7233811482ca0a7a3fc513b7fd1c504a52c86155af7c448e63d1385ef82fb22e7db734d989af5da5f0d5866aba3baebe0d2d0603ec1b3d1b710ee3f96cca826990705f98d311fc6e594e9cfbbff52707f494677f1fdd39b0ffdf161d59f33a6efed8beab6fec882537c6ebacac7c08f6be92ea564fe7b63681b0a69bdf9b073c6a37acefd3d2d3e2151a661169c4e085ca60ca1be06b88d69e50ffa1bc3620af3cf4f496e4826f1c3de93f8e2f3faccefc3a3db895ab7763a6b5cdb6d981ce0755a462996f865140986335289be235813f197b3bbf67f598b67c0a62bee2c2e58ed7da06a74ef17b7403848db94dc1c57b44ea4c2a8ebdde450461a12ba13e46c61624df39266151ee5d7a096e8171dc8f9ba20b07760cd32ef86245e912e121ddc7414ce0ab880ffaaa8adb5b5ba5624139299810de660bfd5121923e3696ced97f6ffe1108f9c97c5abeff58dc163f41efa3f8dcab383fdb6966b73b1b27cb1a6f88f30bda0e4bc647c46d0dddedb5dd0f6b37cace40ef6be0d2ca28a6ba93a427af0cd6b9d92b32e11b74aadc653c9d2986cc1864477607ad5649dd8b7a87b07bfc771e88b4a7c6c055f62877249ad64d71c47112d5d9bc7c6f63aa9cf9bd83d0de498d57934827978b489d3c3c24e8d101dff4acb60f14bcb103684ba3951582a72dfcefeb8ed1efe9443a5288865eeb44e97c23e27a9a63d7a94ce32eafe2962223d7387b8298866cc1c815f523f5a7d350608a826342a80ff63a1f726cfb0dcc207ca5230c13460ffbcc9b5f002dd93b389fc677cf141383f2cfce2ac43d47820acbbc0ed362983a79b9d0d4caa844b944bd531a984f3639102c511dfd4655e799e0a7dd365f0bc3543f6d5164affb517464d2ea43f169601ea99454e8ebfd1ce4b50398dcf9bfb8164c0d6e1712f86c25ee48870c3827aa27df04c5a4ebb2773765d5526ba918c854e966ff810d5f8076a3aeaaf28b6ef26e2bb8b36550af7890489e5dbb2a3abb0daea2e84eacc74ac452b6fc94f466baec8929d921200c98b0b3bcbbbe31706da7ab744371740bb6ece09bdaadc9d879059e515051d106a0a42ccb6eaa9c254fa578f2d23124a8246a99f646554f3e9f82db3f9ab96dc22989347bd7e29702477f9dff756bc932b7e785936ef19c676eafb8b5ab6553cdb4eeb57036ba07714e5faaef1236b0b9222e6edc4858895599eb9daedec458e36ab5fe99b5375fdf702b48814b4eb1802cbdb1181a8d2fcb503e1aa19a1269fc2bd52d6a252077ca34499d55f49f046336de74ba593842de6ca7f85db2d560c40a4706f8eb8e5b89fbddfa652b96b0f50cd4ccbb2261fa707ad97d0a7a74613a400207e2f7873c824cc5e82c8280c8c6600d48e3b5690fa2d7ff6a2fa320f2f80008972ca6b3479f91eb4cbb9ffd23aa0402b4fbc8681d7b726a1fea8bf8749c810f6e236f4b0e632b8249fc9d7f42d7dcad90d43315da03fe6edc6bb0d72791c3d5091947d7488cf5fa9f82a91ce97634ca4757cce48b5e1db699bba1ae13ebeaf86c91b029b22da5244c2686199cead5be8fba2c241ab9067d5f2c3b93f429972e2faa519096bba60c5971ad467c99f87cddc0f60cb05e9b8b6bd20c9c1bb87e9005413383e47236724ed683bb2aae92301290be3860c76c036942165af0a72b6a0f9ce9ba88f937044b9693e5b8d0ee408f8c2c29273b88c95e7040eb230121d0bb6b9b93b48f377bd90c2486f5e2bf2c6b128a84a1af0d5ecb4f31a0b36b6ae381e3252dd206c0b28e2b0e18dc363dac6255f538a942307598d0ead385a7e489c5737e8ac79ec48afb051d8c6f09d5a832d44221898271bdbdc658ef86c4531e4f86b150fbff8f0088aff581b64cb9e8e1bc5dad2ee362d8bac3f2f223d7e4672e2779187aa84f8add70fbb6acc1dd80e5beaba94ea52bbcc86e9b4c29f1247e998a5e939a527ea7fa82462b347d798233f0e64888eb1e49fd2ad3aa0190d7fec8e893e15f9eeeea383ac24043068cf53192b8e5ab7aaea8ca4d72d053c42c3a85fb63131655525b0cd4d7906cb12f4923711bf3e5f55178e80d00be4be8bd8bbe2d66e0eb72a9db1a0c40e9daeaece6a5b8b0ad2647504dec87552445a5a8245f22e8d06be928515fb1267d5f0f0e2d6ee3d18c4b67b73ed9c6b608596d64d46554c1e75a45ad028c486b8263c4ce197aadf65924d710433f5a866304b9fd93dd5ab7f7bd0c6e23f992940fe8e03a846e5965f9a8478db8fbf33d0bd72045298de7cf7c0a556d273ef40446d8f85663e96ad9a98277663a895a84aa4791300e7dd59c17eb1537c12bb525d0d5818c06055af71de9d681bd7e9a6b4106e1ef0b8aa0d07ab6221712692e870ca041396b3cad1c855bb690db0b6220dfdc5977b603d053b2b2ac4105ce46a507cb77d9ab88ce3045b9a7a8ab98e42b2ad928e60f3771cc6f14019ed67b2d31e5937b238f055a3372e915fe801df88662fc5de466c6bc6e2bcba3b31618b15a03d3b4bac2323771b6ca98a7d39ae1a080d0a5e97ecab5522c753eddcc7d9214a908c35bde79675755c5414ea1c88542eda7741d6507ed2927369992424aae9b9d0d5d10be5dd8777d0c3bf2dadd464e8444bc64e5e95b44a62da973cec843e110bef3bf15abd61ddfad0bd4b27a68ed5cdea8aadb1ecba943945ad1eb1cff24a81a5ed18de67f4fc434b2cb3ce81d7ce708794cfea8031fc145ef75f42a28d024da9798325a13e3b9a35f5f7d2ca3043a01358e46e090dca0083f2b587fdfc5388186e9dca8b487ee091b7d1749e7e3455cf64a25e77da9d5876250612c69e812a03fe4a369551c5eed3ae8796f70522f583bddd833a523b7544cd14be9a43357972966a92c4278a9295009a6dc19482170f3c05b775b12cf7ba8000c9f13963dd128bc62453ee7bda7450a01d97045ecaeb16fcf6d3ea1a11926408e5bc85f5bca61cbbf488a56195b67d4a1eece6326cd0e3e9312b075d1d928eee9293d09f43622e32ff3a49b4a43632aa77b8c387d4fab9febe095be14dc4be9495e6b4a9897968be2e4cd9acb03af77c1d90110af64b01379d0f0fd85c0935dc24b4958cf39ec1848453130eb44b42132ee1ba6fb006f2a56528cb88506f09ccbc8cd4452e44b7873ff9feaa24cb0bffebaf49d73915a5698ff7bed5edbdcefee6db1c4d885a0e4473b597a5b436415f7089313095f8880a6831fcce61841177ccab3e7cba362b0dc2fdbc427ae5d594bfd64d1b69047690323db5696caf05bd378610b1c1c2499a3fa62384471b47acc5a7541d7233dc80cf0f2b6519e25817b7d1a9a44e401361c3d33bdf4f8d976e1283ea263108ac1c5a640ad7a3703d0ad7a3a4703d0ad7a3703dcccccccccccccccccdcccccccccccccc0000000000000080000000000000000000000000000000a0000000000000000000000000000000c8000000000000000000000000000000fa0000000000000000000000000000409c000000000000000000000000000050c3000000000000000000000000000024f4000000000000000000000000008096980000000000000000000000000020bcbe00000000000000000000000000286bee00000000000000000000000000f9029500000000000000000000000040b743ba00000000000000000000000010a5d4e80000000000000000000000002ae78491000000000000000000000080f420e6b50000000000000000000000a031a95fe3000000000000000000000004bfc91b8e0000000000000000000000c52ebca2b10000000000000000000040763a6b0bde00000000000000000000e8890423c78a0000000000000000000062acc5eb78ad000000000000000000807a17b726d7d800000000000000000090ac6e32788687000000000000000000b4570a3f1668a9000000000000000000a1edccce1bc2d30000000000000000a0841440615159840000000000000000c8a51990b9a56fa500000000000000003a0f20f4278fcbce0000000000000000840994f878393f810000000000000040e50bb936d7078fa10000000000000050de4e6704cdc9f2c900000000000000a496228145407c6ffc000000000000004d9db5702ba8adc59d00000000000020f005e34c36121937c5000000000000286cc61be0c356df84f600000000000032c75c116c3a960b139a0000000000407f3cb31507c97bce97c00000000000109f4b20db48bb1ac2bdf00000000000d4861ef4880db550997696000000008044141331eb50e2a43f14bc00000000a055d917fd25e51a8e4f19eb0000000008abcf5dbe37cfd0b8d1ef9200000000e5caa15aad05030527c6abb7000000409e3d4af119c743c6b0b796e5000000d005cd9c6d6f5cea7bce327e8f000000a2230082e48bf3e41a82bf5db30000808a2c80a2dd6e309ea1622f35e0000020ad37200bd545de02a59d3d218c000034cc22f42645d695430e058d29af0000417f2bb170964c7bd45146f0f3da0040115f76dd0c3c0fcd24f32b76d88800c86afb690a88a55300eeefb6930eab007a457a040dea8e6880e9aba438d2d580d8d6984590a47241f071eb6663a3855047867f2bdaa647516c4ea6403c0ca724d9675fb69090996507e2cf504bcfd06dcf41f7e3b4f4ff9f44ed81128f8182a421897a0ef1f8bfc7956822d7f221a30d6a2b19522df7af39bb02eb8c6feacb9044769fa6f8f49b086ac325700be5feb4d55347d036f20245229a1726274f9f9065942c4262d701d6aa809deff022c7f57eb9b7d23a4d428bd5e0842badebf8b2dea7658789e0d277850c333b4c939b2feb889ff455cc63d5a6cfff491f78c2fb256bc7716bbf3c8a90c37f1c2716f37aef45394e46ef8b563adacf71d8ed97acb5cbe3f08b7597ecc8d0438e4ee9bd17a3be1cedee523d27fbc4d431a263eddd4bee63a8aaa74cf81cfb245f455e946aef743ea9cae88f36e439eeb6d675b9442b128e53fde2b3445dc8a9644cd3e716b69671a8bcdb604a3a1deabe0fe490cd31fe46e95589bcdd88a4a4ae131db541bebd9863abab6b14abcd4d9a5864e2d12ded7e3c9696c6ec8aa07060b77e8da23c54cfe51d1efca8adc88c3865deb0cb4b29435fa5253b12d9faaf86fe15ddbe9ef313b70eef49abc7fc2d14bf2d8a3743786c3269356e96f97b39d92eb9ac045496077fc3c249fbf7da878f7ae7d706e97bc95e7433dcfddae8b499acf086a371ed3dbb28a069bc112322c0d7aca80cce680dea3208c42bd6ab2ab00dd8d29001c390a43f0af5db65ab1a8e08c783fae079dac6672679523f56a1b1cab8a438591891b801705726cfab095efde6cd866f5eb526024ced78610bc65a5eb080b4055b3158814f54d6398e77f175dca021c7b13dae6163694cc871d56d9313c9e9381ecd193abc035f3ace4a497858fb23c76540a048ab047be4c0ce2d4b179d769c3f28640deb629a1d7142f91d5dc494834f32bdd0a53b00650d93776574f57964e37eec448fca205fe8bb6abf6899cb1e4ecf138b997ee876e26a45efc2bf7ea621c3d8ed3f9ea2149bc516abb3ef1e10eaf34ee9cfc5e5ec803bee4ad095124a7258d1f1a1bb1f2861caa95d44bb97dc8eae456e8a2a2672f93c147515eabd93321ad7092df558e71ba62c694d92569c5f7026263c592ee1a2cf77c3e0b66c83770cb02f8b6f7a998bc355f498e44764950f9cfb6d0bec3f379ab598df8eac5ebd8941bd2447e70fc500e37e97b257b62cec91eced58e153f6c09b5e3ddfede33767b667292f6cf49958215b868b74ee8200d2e079bd8771c0aee9f167ae11aaa3800659d8ece98d701a64ee01da9594cc20486f0ee8b2588690fe344188dddc7f148d050931deeea7343e8251aa15d49f59f0464bbd96ead1c1cde2e5d41ac90770ac189e6c9e322399c0ad0f85b0dd04c66bcfe20345ff6bbf309953a61c1586b74683db8416ff46ef7c7fe8cf639a6765186412e66e5f8c15ae4ff1817ec0603f8f7ecb4f4977ef9a99a36da29df0380f335ebee31c55ab01800c09cbc52c07d3bff5ad5c632a1602a04fcbfdf6f7c8c72f73d9737eda4d01c4119f9efa9adddcfde767281d51a10135d646c6b8011554fde181b265a50942c28bd8f726421aa97c5a221f5f0746695957e79a5869b0e98d787533378997c32f2da1c1ae831c64b1d65200846b7db47b7809f29aa423bd5d8c67c03263ce504deb4597e0463696bab740f8fffb01a5206617bd98d8c33ba9e550b6ff7a42cea83f5decbeceb48a131fe5a3df8ce980c947ba933701b1366c336fc617f023e1bbd9a8b884415d4447000bb81dec6cd92a10d3e6e591741559c00da69213e4c71aea43902fdb68ad3798c8877718dd79a1e454b4fb11c39845beba29945e54d8c91d6ae17ad6f3fed66d29f41dbb34279e52e28c0c66585fa6e49918e4e901b145e71ab08f7f2ef7cf5dc05e5d64421d17a121dc731ffaf443757076ba7e4972ae049589a8531c794a49066a69dedb0eda45faab926863179ddb870403d6929250d7f8d6b6423c5d84d2a945c2c59b5b92865b86b2a945ba92238a0b32b782f23668f2a71e14d76877ac6c8eff6423af4402efd126d90c4395d707321f1f76ed6a613583b807e849bde6447fe7a6d3a8c5b902a4a609629c6c20165fa1900813376803cd0f8c7ac387a8db36645ae56b2221228089972cda544949c2fdb0de066ba92aa06cbdb710aa9bdbf23d5d96c8c55335c8c7ace5949482926f8cf4bb3ab7a842faf9171fba392377cbd778b58472a9699cfb6e531404762aff0dd7e225cf1384c3ba4a68198513f5fed18c5befc21865f4695dc25f6658b27e023899d5792fbf98617ad9fb3f772fef0386ff4a58fbeebefad8cffa0f55fbaa8467bf5d2ebaaaee38cf83f9532aba95b2a097fa5cb42a958361f27b745a94dddf883d39746175bae4f9ee9a1171f99417eb8c47d1b912e95db8aa0156cd377aee12b8cc22b4ab913ab30ac155e062acaa17e67f2ba116b609604d316b987b57949ddf5f76499ce30bb8a0fd857e5aed7dc2ebfbe9ad418e077384be138f58141cb3e67a6419d2b1c88f25aed8b26e59e35fa099bd9f46debbf3aed98e5fca6fee3b0480d623ec8a54580d48b97bde25e94a0520cc2ca7ad6aae109aa71a56afa49d0628fff710d904da948051a12b1b86220479ff9aaa8742085df0d244fb90282b4557bf4195a9534a74ac07163a35f275162d2f92fad3e85c9197899b8842b7092e7c5d9b7c8411dabafe35619569258c39db34c29ba59590697e83b9fa432eef0712c2b202cfbbf4035ee467f9947df5444bb9af6181f578c2baeee01b1ddc32169ea71bbaa1321773692ad9626493bf9b8591a228cafedccf03758f7b7d78af02e735cbb2fc3ed4c3445273da5cabad61b001bfef9da764fa6a1388083a16197a1cc2ae6bc5d0fdb84518aa8a085b9f98a3729ac6f6453d27579e54ad8a99633fa687203c9a4b8678f6e254ac367f3ccf8fa928cbc0dda716b41b6a57849f0bc3f3d3f2fdf0d5511ca1a2446d6543e75978c4b79e9625b3b1a4e54a649f14617096b56546bcee1fde0d9f5d3d8759790cfc22ff57ebeaa755d106b50ca9d8cb87dd75ff1693f288d54224f1a709cebee95453bfdcb72feb8a536ded110c812e242a28efd3e5faa56da8c868168f109d561a7975a48fbc8744697d016ef95544ec60d7928db3aca995c3dc81c9376a5527398df770e017147bf453e2bb856295b843b89a468c8eeccc78746d9593bbbaa654664158afb2270097d1c87a386a69d0e9bf512edb9e31c0fc057b9906e24122f217f3fc88031ff8bde3ec1f445ad2aaeedd2f3cabc32676ad1ce827d5f186556ad53b0bd674b0d3d823e2718a567475626505c785494e8467562d87f66cd112bbbec638a7db616501acf828b4c785d7696ef806d152babe01d73633e19cb32602455ba482733417614602c0ec8460b04216724da390015df9d702f027a5785cd39bce20ccf441b4f78d03ec31ce9633c8420229ff7152a1757104677e413e20bd69a1799f86d384e9c662000fd14d682cc40958c76808e6a3787bc05245618237350c2ef9828adfcc569a70a7cb7cb142a1c7bc9b91b60b407660a688fedb5d9389f9abc235a40ed093f8cf6afe5235f8ebf756f3434d12c4b8f68305de53217bf35a16984a708b7a337a72c3d6a8e959b0f11bbe5c4c2e59c0184f740c1364701ceea2ed73df796ff0de6211e78b3ec6d1d48594a82bac4556cbdd8ae12ece37064aa7b9923617d72b3e956d99bac1c5871c11e83704ddccb68dfac8a01499dbd4b10a91a2220a4092989c1dc8597f124a5e4db54bab0cd0b6be03253a301f97dcb5a0e21dd60f8464ae442e247e73dea971a48dd2e589d2feecea5cad5d1056148e0db1475f2c873ea825741875946b99f150dd1977f7284e122fd12fc93ce3ff96528a6faa9ad9706bbd827bfb0bdcbf3ce7ac0b5501104dc66c635afa0ed3ef0b21d84eaa0154e0f7473c785ce9e375a71487710a8134ecfaac6596b3e35c53d1d9a80d4da141a739187f7ca01c34a84510d350a009121148de1e4de49120892bea83320446ab0aed4a93605db6686bb6e4a43f8517564da81df8b9f4e34206e41dce8e669dab60122536f378cee983aed2801960426b7c2bd7c1301742e4245a07a11ff812865bf64cb2fc9c521dae3049c927b69767f233e0de3c44a7a4d97c9bfbb1a37d01ef409816a58ae806082e419d4e86ee6095281f8e4eada2088a7991c4e2272ab9baf2a6f1a258cb8aecd7b5f5dbb1746769af10ae6517bfd6f3a6919929efa8e0a16dcaac3fdd6eccb010f6bff32ad3580a09fd178e948affdc94f3efb0f507ef4c4bfcddd99cb61f0a3df8958ef9641510afbd4a0f44a4a74c4c76bbf137be1ad41a6d9d13558dd15fdf53eaedc56d218961c8842c55f8e29b6b7492b49be4b4f53cfd32776ab6db828611b7a1c21d22338cbc3f1505a49223e8d5e44a33a5ea3fafab0f2d83a63b16b1058f0e40a7f2874dcb29f82390ca5b1dc7b2121051efe9203e74f62c34bdb2e478df1654256b24a94d911a9c40b6ef8eab8b8e54f7c2b689d01a20c3d0a3ab7296aeb129b57324ac84a1e8f3c48c560f3cda1e74a2902dd7e5c97118fb17968965889288657a7ca62f7e8ddef99dfbeb7eaab7eafe981b90bbdd31567885faa61ed565a53e7f22742a55de356b935c2833855f27878f95883ad5560346b873f27fa637f168f3ba2a898a2c8457a610ef1fd0852d43b069752b2d9bb2f6676af5138273fc290e62293b9c425ff401c5f298a28f7bb491baf3498313777142762f3fcb739a2136a9701c24d7d40dd353fb0efe1001aa83d38c23ed06a5e863145dc99eaa404a32043836f448cee27c59b47bc6d5d0dc3e05c643b1da811bdc6fa11af80a05948e86b794dd283191e9e5a4109b26831c19b4f27cca727df5631fced4c1f0a3631f612f1cfdcfdcf23ca7014af2ec8c3c67393b63bc01ca178608416e9713d885e00305bed582bc9da74ad149bd184ea7d844862d4ba22b85519d459cec9e21d10ed6e7f8dd453bf35282abe19303b542c9e590bbca170ab0e76216dab84362933b1f756a3d9d0c9ca1fb9b10e7d43a780a6712c50ce28701457d616a90c5248b66802bfb27dae94196dcf984b4f6ed2d8060f6f9b15164d2bb5338a6e1736939a0f873785eb27e635534e3078de8e123647b480bdb5f5ebc6a01dc49b062da2c3d9a1ace91f7756bc501535cdcfb1078cc40a14176ba29631be1b3b9899d0acb7fc804e9a929f43b62d92028ac44cdbd9ffa45635433f1caba0f2932d79540ad4779177ca9c0d6bed4a9597f865d48ccccab8eed49708cee4914301fa8745affbf56f2685c8c2f6a5c19fc26d21131ff6fec2e8373b75dc2d98f5d5883ab7effc553fd31c825f532d0f3742ea4555e7fb7a87c3eba6fb23fc430123acdeb355fe5d21bce2885cfa77a5e4b4480b3815bcf63d1807966c35119365e55a01f6232c3bc05e1d74034a69fc3b56ac8a7fafef32b47d98d50c18f87346385fa51b9fef0f6984fb1d2d8b9d4005e939cd3339f569abfd16e074fe8098135b8c3c80047ec802f860ac862624ce142a6f4fac0582761bb27cdbd7dbdcfcce9e7989c7897b81cd538802cddac0340e421bfc356bde6630a47e078149804505deaee74ac6ce0fccc5818cb0cdf02527a5295c8eb430c1e80370ffdcf9683e618a7babae6548f256005d3fd837c2420df50e969202af32eb8c6477ed2cd16748bd2914154fa571d33dc4c1d47811c512e47b652e9f8ade43f13e0e598a163e5f9d8e3a62377d9dd0f18588fff445e2f9c678e4876eaa7ea090f5701000000000000000a000000000000006400000000000000e8030000000000001027000000000000a08601000000000040420f0000000000809698000000000000e1f5050000000000ca9a3b0000000000e40b540200000000e87648170000000010a5d4e800000000a0724e1809000000407a10f35a00000080c6a47e8d0300000000000000f03f000000000000244000000000000059400000000000408f40000000000088c34000000000006af8400000000080842e4100000000d01263410000000084d797410000000065cdcd41000000205fa00242000000e876483742000000a2941a6d42000040e59c30a2420000901ec4bcd64200003426f56b0c430080e03779c3414300a0d8855734764300c84e676dc1ab43003d9160e458e143408cb5781daf154450efe2d6e41a4b4492d54d06cff08044"].pack("H*"), 0, 16058)
	@data1 = "".b
	@m.init(16809516, ["020000000000803f000020410000c84200007a4400401c460050c347002474498096184b20bcbe4c286b6e4ef902155000000000000000000000000000000000000000002e5b2a5d2d656e642e5b2a5d203a202e200000207374726f6b652d77696474683d2222207374726f6b652d6461736861727261793d22222f3e0a2e2e2e3c6c696e652078313d22222079313d22222078323d22222079323d222c302c302c312c3c656c6c697073652063783d22222063793d22222072783d22222072793d223c636972636c652063783d222220723d223c706f6c79676f6e20706f696e74733d2222202f3e0a3c7061746820643d2220666f6e742d73697a653d222220746578742d616e63686f723d223d223c646566733e0a3c2f646566733e0a223e0a0000db1500010400000036110001060000003e2f0001030000003611000106000000d315000103000000110a0001050000003c16000102000000110a000105000000e0150001040000003011000105000000e11500010300000030110001050000004f2f0001030000003011000105000000e2150001020000003011000105000000040000000000000000000000040000000000000000000000260800010400000000000000b52e000107000000b52e000107000000b30f0001070000004e140001070000005a2e000107000000472e000107000000db160001070000007f16000107000000431700010700000063706d63000000000000000022000000000000000000000000000000000000000000000000000000000000001500000000000000010000000000000000000000000000000000000002000000000000000000000000000000000000000500000006000000070000000800000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000002b0000002d0000003f0000004000000041000000420000002d00000023000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000004f0000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005c0000005e0000005f00000060000000610000006200000063000000640000006500000011000000660000006700000068000000690000000a43616e6e6f74207072696e7420737461636b2074726163653a20737461636b2074726163696e672069732064697361626c65640a70616e69633a20"].pack("H*"), 0, 1116)
	@data2 = "".b
	@m.init(16810708, ["4a00000000000000000000000000000000000000000000000000000064"].pack("H*"), 0, 29)
	@data3 = "".b
	@m.init(16810840, ["4a0000000101000000000000000000004a00000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000002c00000000000000000000003000000000000000000000002700000000000000000000003e00000000000000000000003700000000000000000000003800000000000000000000003500000000000000000000004000000000000000000000002600000000000000000000004100000000000000000000003200000000000000000000003100000000000000000000004400000000000000000000004500000000000000010001000000000000000000000000000000000000000000000000000000000000000000000000002e0000000000000001000100010100000000000000000000000000001800000000000000000000003d"].pack("H*"), 0, 321)
	@data4 = "".b
	@m.init(16811264, ["26"].pack("H*"), 0, 1)
	@data5 = "".b
	@m.init(16811376, ["2c"].pack("H*"), 0, 1)
	@data6 = "".b
	@m.init(16811488, ["44"].pack("H*"), 0, 1)
	@data7 = "".b
	@m.init(16811600, ["40"].pack("H*"), 0, 1)
	@data8 = "".b
	@m.init(16811712, ["4500000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000003a000000d93e000100000000000000000000000000000000010000000000000000000000000000000000000002000000010000000000000000000000000000000000000000000000000000000000000000000000050000000100000000000000000000000000000025203020203120205b0003000400000000000000000000008400000007000100020014000c000f0009000b000e0008000d0010000a00157d1a001b001c001d001e001f00050006005e62616420737472696e6720617420206368617261637465720a0a6d697373696e6720636c6f73696e6720706172656e7468657369730a0a282952616e206f7574206f66207265676578206f7065726174696f6e732028757365206269676765722053697a65645265676578286f70732b2b2c2073657473290a0a4f7574206f6620696e737472756374696f6e7320666f722072656765780a52616e206f7574206f662063686172616374657220736574732028757365206269676765722053697a65645265676578286f70732c20736574732b2b290a0a50617373656420746865206861726420323536206c696d6974206f6e2063686172736574732e2043616e6e6f7420636f6d70696c652e0a0a41706f6c6f676965732c20627574206d756c74692d62797465206368617261637465727320696e207365747320617265206e6f7420737570706f727465642e0a0a496e76616c69642072616e67653a202727203e2027270a0aefbfbd00000100000002000000030000000400496e76616c6964206d756c7469627974657320666f756e6420696e2072616e67653a2030782c2030780a0a41706f6c6f6769657321212c20627574206d756c74692d62797465206368617261637465727320696e207365747320617265206e6f7420737570706f727465643a2030782e0a0a63686172736574732063616e27742066697420436f6e736563757469766520776f726420627265616b7320617265206e6f74206c6567616c206f722073656e7369626c650a0a203e2072657065746974696f6e20636f756e7473206d7573742066697420696e20612075382c20676f7420666f756e642061206d6f646966696572206f6e2061206d6f6469666965720a0000040000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000001000000020000000300000000000000000000000000000000000000000011000000000000000000000033010001080000006106000110000000690000010b000000340800010f000000be0600010d000000830b00010e000000171100010e000000fd1000010c0000000a1100010c0000007e0a00010e000000e70500010b000000de01000114000000620700010e000000c10a00010c000000400d000112000000ea0e00010d000000e10600010e000000ea1000010d000000170100010c000000f30500010a0000008e1200010b0000009a120001120000000a0f00010f000000a50300010b000000230700010e000000a00a000106000000bf0400010c000000db0e00010e000000781200010b000000ad1200010a000000120900010b000000c81100010d000000650900010e000000f30100010c000000460e000116000000b812000108000000d20100010b000000910500010f00000056060001050000009406000115000000550b000111000000e111000111000000060a00010a000000d41200010c000000d30700010d000000d61100010a0000005614000109000000740b00010a000000440000010a000000e1120001100000005e0d00010a000000da0a000111000000870f0001080000003b0000010800000047130001160000005e13000115000000700c00010f000000560700010b0000009c0e00010f0000001602000107000000f3030001110000000a0700010b0000003513000111000000571000010c0000004f060001060000009a08000112000000471000010f000000ce0a00010b000000c50d00010b0000003200000108000000590f00011500000056110001140000002b0b0001090000007d11000114000000a20800010a000000970d000112000000190000010b0000007b0f00010b000000040d00010f000000f809000107000000240d00011b000000810e00010a0000008d1400010d000000900f000111000000260e00010c0000001b13000119000000371000010f000000c1120001120000008f1600010b0000008a0c00010a000000ab0a000115000000fe12000114000000841300010d0000009213000115000000d10d00010b000000d713000112000000be07000114000000ec0a00011a000000da03000112000000700e000110000000330e000112000000d50c00010c0000005d0e0001120000003d110001180000007e0800011b000000bd0000012200000092110001150000006b11000111000000180b000112000000a8110001110000004309000111000000f40c00010f000000430b000111000000f3110001110000008c0e00010f000000ac0e0001120000005604000119000000761000010e0000006410000111000000b50d00010f0000008412000115000000ef0f0001110000000110000114000000d90f000115000000e20c0001110000003a1200011100000054120001230000009c1100010b0000000512000106000000600c00010f00000005040001140000000e0b0001090000004b0a00010d000000960b00011d000000f80e000111000000b40b00011b0000006a0000006b0000006c0000006d000000000000000000000000010000000000000000000002000000000000000000000000000000000000000b0000000000000000000000110000000000000000000000000000000100000000000000000000000000000003000000000000000000000000000000000000000c0000000000000000000000000000000d00000008000000000000000c000000000000000c000000000000000c000000000000000a000000000000000c000000000000000d000000000000000c0000000000000009000000000000000c000000000000000000000000000000040000000000000000000000000000000500000000000000000000000000000006000000000000000000000000000200000008000000040000000500000006000000070000000900000001000000030000000000000000000000000000000000000000000000000002000000000000000000000000000000010000000000000000000000000000000a00000000000000000000000000000064000000000000000000000000000000e803000000000000000000000000000010270000000000000000000000000000a086010000000000000000000000000040420f000000000000000000000000008096980000000000000000000000000000e1f50500000000000000000000000000ca9a3b00000000000000000000000000e40b5402000000000000000000000000e876481700000000000000000000000010a5d4e8000000000000000000000000a0724e18090000000000000000000000407a10f35a000000000000000000000080c6a47e8d030000000000000000000000c16ff2862300000000000000000000008a5d784563010000000000000000000064a7b3b6e00d00000000000000000000e8890423c78a0000000000000000000010632d5ec76b05000000000000000000a0dec5adc9353600000000000000000040b2bac9e0191e02000000000000000080f64ae1c7022d15000000000000000000a1edccce1bc2d30000000000000000004a480114169545080000000000000000e4d20cc8dcd2b7520000000000000000e83c80d09f3c2e3b0300000000000000106102253e5ece4f2000000000000000a0ca17726dae0f1e430100000000000040eaed7446d09c2c9f0c00000000000080264b91c02220be377e0000000000000081efac855b416d2dee040000000000000a5bc138938d44c64d31000000000000648e8d37c087adbe09ed01000000000000000000000000000000ff3f000000000000000000000000004002400000000000000000000000000090054000000000000000000000000000f4084000000000000000000000000080380c40000000000000000000000000a0860f4000000000000000000000000048e812400000000000000000000000002d311640000000000000000000000040787d1940000000000000000000000050d6dc1c400000000000000000000000f2052a204000000000000000000000806e8774234000000000000000000000204aa9d126400000000000000000000054ce09232a4000000000000000000000e941cc6b2d40000000000000000000406352bfc63040000000000000000000087e93371c34400000000000000000008a5d7845633740000000000000000080ec74d616bc3a400000000000000000d01309468e153e400000000000000000c4588bd7f15a41400000000000000000f52e6e4daeb14440000000000000002059dd64f00c0f48400000000000000068af147e2cd0524b400000000000000042db999d3784a74e4000000000000040092980c2a2b2085240000000000000904b3320734bdf4a5540000000000000741e40e84f1e979d5840000000000080081328f1f1727e025c400000000000a0ca17726dae0f1e435f40000000000048bd9dce089a93e593624000000000009a2c45028b80f8def865400000000040e03b6be156505b8b3b69400000000050d80ac6996c24326e8a6c4000000000648e8d37c087adbe09ed6f4000000080fe78b822d8742c1726347340000000203e97662b0e92f79c2f817640000000a80d3d40b6917635847be17940000000892826e8111b6aa132ed2c7d40000040abb22f62d6a1c4497f28788040000010569fbbfa4bca351c9f32d683400000ca9543b57c6f9ea171a3df25874000803c7b94e25b0b060a4e8c576f8a4000a00b9a39db328e878c616f2dcb8d400044470004c9dfb8d4f79c65fc1e91400015590045bb17e7c935047fbb669440405a6f4016aadd603c43c55e6ac09740689845e84d8a8abc054a3b7b42189b4082fe5662e12cad2b871c0a1a535e9e40"].pack("H*"), 0, 3760)
	@data9 = "".b
	@m.init(16815714, ["01"].pack("H*"), 0, 1)
	@data10 = "".b
	@m.init(16815784, ["04"].pack("H*"), 0, 1)
	@data11 = "".b
	@m.init(16815852, ["07"].pack("H*"), 0, 1)
	@data12 = "".b
	@m.init(16815920, ["080000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000000000000001000000000000000000000000000020345065c05fc9a652bb13cbaec440c21806c8df7100d5a87cf56f0fda58fc27136e4756357d24206502c7e768e48ca41de9e60268d7cd39617977fcc2405bef16798cde43ffa751f991f3b278f5bdbe11e857e9d6e8bee87bb054ac8f848d751bea23a499e9f9d38bb7a3714061da3e15cee33ecb73f948088c97b427d51b7010a2bfefb9eb8532154db44db49bbb6f1996b6076cf8e7eead36d9b4f59135ae13222218af4e6a684d91daaa3d4f40741e9fbd9ee006a1c09857c2a7fda40e90170e7d497173e3208fb220d87605143b12853d7434811343b0ad297a5f27f4351c000000000000000000000000000000100000000000000000b9340332b7f4ad1410db1ab30892540e0d307d951447ba1a66088f4d26adc66df598bf85e2b74511ca96853d92bd1debfca11860dcef52163c92ae220bb8c1b4839d2d5b0562da1c304c7e8f4e8bb25b16f4529f8b56a512fbd4827643ed8af08fe7f9311565191850f19bd94a13eeb4284cf0a686c1251f035fc270cb9e4916e642889c44eb2014b0650836ad6ea58585f0ca14e2fd031a0b899979d5b13d09d8da973a35ebcf10ac363f5e73bb38cf3e6752fa44afba157a0000007b000000030000007c0000007d0000007e0000007f000000800000001b0c0001852e00011b0c0001852e0001852e00011b0c00011b0c00011b0c000108000000000000000200000004000000030000000000000000000000000000000000000001000000010000000200000028020001f510000113100001000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b000000000000000000000000000000000000000000000000000000000000000300000004000000040000000600000083f9a200444e6e00fc291500d1572700dd34f50062dbc0003c999500419043006351fe00bbdeab00b761c5003a6e2400d24d42004906e00009ea2e001c92d100eb1dfe0029b11c00e83ea700f535820044bb2e009ce98400b4267000417e5f00d6913900538339009cf439008b5f840028f9bd00f81f3b00deff97000f980500112fef000a5a8b006d1f6d00cf7e360009cb2700464fb7009e663f002dea5f00ba277500e5ebc7003d7bf100f739070092528a00fb6bea001fb15f00085d8d00300356007bfc4600f0ab6b0020bccf0036f49a00e3a91d005e619100081be60085996500a0145f008d40680080d8ff0027734d0006063100ca561500c9a873007be260006b8cc00019c44700cd67c30009e8dc0059832a008b76c400a61c960044afdd001957d100a53e05000507ff00337e3f00c232e800984fde00bb7d3200263dc3001e6bef009ff85e00351f3a007ff2ca00f1871d007c9021006a247c00d56efa00302d7700153b4300b514c600c3199d00adc4c2002c4d41000c005d00867d4600e3712d009bc69a0033620000b4d27c00b4a797003755d500d73ef600a31018004d76fc00649d2a0070d7ab00637cf8007ab057001715e700c04956003bd6d900a78438002423cb00d68a77005a542300001fb900f10a1b0019cedf009f31ff00661e6a0099576100acfb47007e7fd8002265b70032e88900e6bf6000efc4cd006c3609005d3fd40016ded700583bde00de9b9200d22228002886e800e2584d00c6ca320008e31600e07dcb0017c05000f31da70018e05b002e1334008312620083480100f58e5b00adb07f001ee9f200484a43001067d300aaddd800ae5f42006a61ce000a28a400d399b40006a6f2005c777f00a3c28300613c88008a737800af8c5a006fd7bd002da66300f4bfcb008d81ef0026c1670055ca4500cad9360028a8d200c2618d0012c977000426140012469b00c459c400c8c544004db291000017f300d443ad002949e500fdd5100000befc001e94cc0070ceee00133ef500ecf18000b3e7c300c7f8280093059400c1713e002e09b3000b45f30088129c00ab207b002eb59f004792c2007b322f000c556d0072a790006be71f0031cb960079164a004179e200f4df8900e8949700e2e684009931970088ed6b005f5f3600bbfd0e00489ab40067a46c00717242008d5d32009f15b800bce509008d312500f774390030051c000d0c01004b0868002cee580047aa900074e70200bdd62400f77da6006e4872009f16ef008e94a600b491f600d1535100cf0af20020983300f54b7e00b2636800dd3e5f00405d030085897f00555229003764c0006dd81000324832005b4c75004e71d40045546e000b09c1002af569001466d50027079d005d045000b43bdb00ea76c50087f91700496b7d001d27ba0096692900c6ccac00ad14540090e26a0088d989002c72500004a4be0077079400f330700000fc2700ea71a80066c2490064e03d0097dd8300a33f97004394fd000d868c003141de0092399d00dd708c0017b7e70008df3b0015372b005c80a0005a809300101192000fe8d8006c80af00dbff4b0038900f005918760062a5150061cbbb00c789b9001040bd00d2f2040049752700ebb6f600db22bb000a14aa0089262f0064837600093b33000e941a00513aaa001da3c200afedae005c2612006dc24d002d7a9c00c0569700033f830009f0f6002b408c006d31990039b407000c201500d8c35b00f592c400c6ad4b004ecaa500a737cd00e6a93600ab929400dd4268001963de00768cef00688b5200fcdb3700aea1ab00df15310000aea1000cfbda00644d6600ed05b700296530005756bf0047ff3a006af9b90075bef3002893df00ab803000668cf60004cb1500fa220600d9e41d003db3a400571b8f0036cd09004e42e90013bea4003323b500f0aa1a004f65a800d2c1a5000b3f0f005b78cd0023f976007b8b040089177200c6a653006f6ee200efeb00009b4a5800c4dab700aa66ba0076cfcf00d1021d00b1f12d008c99c100c3ad77008648da00f75da000c680f400acf02f00ddec9a003f5cbc00d0de6d0090c71f002adbb600a3253a0000af9a00ad539300b6570400292db4004b807e00da07a70076aa0e007b59a10016122a00dcb72d00fae5fd0089dbfe0089befd00e4766c0006a9fc003e807000856e1500fd87ff00283e0700616733002a1886004dbdea00b3e7af008f6d6e009567390031bf5b0084d7480030df1600c72d430025613500c970ce0030cbb800bf6cfd00a400a200056ce4005adda000216f47006212d200b95c8400706149006b56e00099520100505537001ed5b70033f1c400136e5f005d30e400852ea9001db2c300a132360008b7a400eab1d40016f721008f69e40027ff77000c0380008d402d004fcda00020a59900b3a2d3002f5d0a00b4f9420011dacb007dbed0009bdbc100ab17bd00caa28100086a5c002e551700270055007f14f000e1078600140b640096418d0087bede00dafd2a006b25b6007b89340005f3fe00b9bf9e00686a4f004a2aa8004fc45a002df8bc00d75a9800f4c795000d4d8d00203aa600a4575f00143fb10080389500cc20010071dd8600c9deb600bf60f5004d65110001076b008cb0ac00b2c0d000515548001efb0e009572c300a3063b00c040350006dc7b00e045cc004e29fa00d6cac800e8f341007c64de009b64d800d9be3100a497c3007758d40069e3c500f0da1300ba3a3c004618460055755f00d2bdf5006e92c600ac2e5d000e44ed001c3e420061c4870029fde900e7d6f300227cca006f91350008e0c500ffd78d006e6ae200b0fdc6009308c1007c5d74006badb200cd6e9d003e727b00c6116a00f7cfa9002973df00b5c9ba00b7005100e2b20d0074ba2400e57d600074d88a000d152c0081180c007e669400012916009f7a7600fdfdbe005645ef00d97e3600ecd913008bbab900c497fc0031a82700f16ec30094c53600d8a85600b4a8b500cfcc0e0012892d006f5734002c56890099cee300d620b9006b5eaa003e2a9c00115fcc00fd0b4a00e1f4fb008e3b6d00e2862c00e9d48400fcb4a900efeed1002e35c9002f396100382144001bd9c80081fc0a00fb4a6a002f1cd80053b484004e998c005422cc002a55dc00c0c6d6000b1996001a70b80069956400265a60003f52ee007f110f00f4b51100fccbf50034bc2d0034bcee00e85dcc00dd5e6000678e9b009233ef00c917b80061589b00e157bc005183c600d83e1000dd7148002d1cdd00af18a100212c460059f3d700d97a98009e54c0004f86fa005606fc00e579ae008922360038ad22006793dc0055e8aa0082263800cae79b00510da4009933b100a9d70e006905480065b2f0007f88a700884c9700f9d136002192b3007b824a0098cf2100409fdc00dc475500e1743a0067eb4200fe9ddf005ed45f007b67a400baac7a0055f6a2002b88230041ba5500596e0800212a86003947830089e3e600e59ed40049fb4000ff56e9001c0fca00c5598a0094fa2b00d3c1c5000fc5cf00db5aae0047c586008543620021863b002c799400106187002a4c7b00802c1a0043bf120088269000783c8900a8c4e400e5db7b00c43ac20026f4ea00f7678a000d92bf0065a32b003d93b100bd7c0b00a451dc0027dd630069e1dd009a941900a829950068ce280009edb400449f20004e98ca00708263007e7c23000fb93200a7f58e001456e70021f10800b59d2a006f7e4d00a5195100b5f9ab0082dfd60096dd610016360200c43a9f0083a2a10072ed6d00398d7a0082b8a9006b325c0046275b000034ed00d2007700fcf4550001594d00e071800000000040fb21f93f000000002d44743e000000809846f83c0000006051cc783b00000080831bf0390000004020257a38000000802282e336000000001df36935d93e0001000000003899000100000000000000001b0c0001070000000c000000d00b000146000000852e000107000000852e000107000000230c0001070000002e140001070000000e000000852e000107000000230c0001070000002e14000107000000852e0001070000000000000038990001000000000000000000000000000000000000000000000000000000000200000000000000549700010100000000000000000000000000000000000000000000004497000100000000000000000000000000000000ffffffff"].pack("H*"), 0, 3748)
	@data13 = "".b
	@m.init(16820183, ["01000000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000ffffffff0000000000000000000001"].pack("H*"), 0, 64)
	@data14 = "".b
	@exports = { "detect" => method(:_f18), "render_with_metadata" => method(:_f28), "render" => method(:_f559), "meta_descr_len" => method(:_f569), "meta_descr_ptr" => method(:_f570), "meta_title_len" => method(:_f571), "meta_title_ptr" => method(:_f572), "meta_diagram_type_len" => method(:_f573), "meta_diagram_type_ptr" => method(:_f574), "error_name_len" => method(:_f575), "error_name_ptr" => method(:_f576), "options_capacity" => method(:_f577), "input_capacity" => method(:_f578), "get_output_ptr" => method(:_f579), "get_options_ptr" => method(:_f580), "get_input_ptr" => method(:_f581) }
	imports.each_value.to_a.uniq.each { |s| s.attach(self) if s.respond_to?(:attach) }
	@wasi&.attach(self)
end

Instance Attribute Details

#exportsObject (readonly)

Returns the value of attribute exports.



1035
1036
1037
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1035

def exports
  @exports
end

Instance Method Details

#global_export(name) ⇒ Object



1047
1048
1049
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1047

def global_export(name)
	instance_variable_get(GLOBAL_EXPORTS.fetch(name))
end

#global_get(name) ⇒ Object



1043
1044
1045
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1043

def global_get(name)
	instance_variable_get(GLOBAL_EXPORTS.fetch(name)).value
end

#import(name) ⇒ Object



1055
1056
1057
1058
1059
1060
1061
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1055

def import(name)
	return @exports[name] if @exports.key?(name)
	return global_export(name) if GLOBAL_EXPORTS.key?(name)
	return table_export(name) if TABLE_EXPORTS.key?(name)
	return @m if MEMORY_EXPORTS.include?(name)
	nil
end

#invoke(name, *args) ⇒ Object



1039
1040
1041
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1039

def invoke(name, *args)
	@exports.fetch(name).call(*args)
end

#memoryObject



1037
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1037

def memory = @m

#table_export(name) ⇒ Object



1051
1052
1053
# File 'lib/dewasm/pozeiden/wasm_module.rb', line 1051

def table_export(name)
	instance_variable_get(TABLE_EXPORTS.fetch(name))
end